jQuery: преобразовать атрибут onClick в jQuery click

#javascript #jquery #sharepoint #click #onclick

#javascript #jquery #sharepoint #нажмите #onclick

Вопрос:

У меня есть веб-страница с более чем 100 гиперссылками, для которых установлены атрибуты onClick и href. По большей части это работает, но я столкнулся с проблемой, когда браузеры, такие как IE7, используют атрибут href поверх атрибута onClick. Мне нужно, чтобы атрибут onClick был по умолчанию, чтобы моя функция загружалась при нажатии. Я подумал, что мог бы легко сделать это, используя jQuery и установив для события click значение атрибута onClick, но мне не повезло, как мне это сделать? Прямо сейчас приведенный ниже код устанавливает МНОЖЕСТВО событий нажатия на одну гиперссылку. Когда я нажимаю на гиперссылку, я могу просматривать события GET, отправленные несколько раз для гиперссылки.

     $("a[href*='/RightSizeOption/NewForm.aspx']").click(function() {
        OpenPopUpPage($(this).attr('href'), RefreshPage); 
        return false;
    });
  

Комментарии:

1. Лучше всего было бы просто очистить свой код раз и навсегда. Таким образом, он будет более удобен в обслуживании. Этот код добавит только один обработчик события щелчка на ссылку, которая соответствует селектору.

2. Итак, вы говорите, что удалили onclick и используете приведенный выше код исключительно для настройки обработчика кликов… Вы уверены, что обработчик кликов на самом деле запускается более одного раза? Или ваш OopenPopUpPage делает что-то странное? Попробуйте добавить консоль. регистрируйте оператор внутри обработчика кликов, чтобы определить, сколько раз он фактически выполняется.

3. Также, если я добавлю «$ (this).attr (‘href’)» в оповещение, оно предупреждает меня более 10 раз с помощью href гиперссылки, на которую я нажал?

4. Покажите нам образец вашего html-кода с несколькими ссылками, чтобы мы могли оценить поведение.

5. Это страница SharePoint 2010, и ранее я устанавливал событие onClick с помощью функции, которая объединяла href и функцию OpenPopUpPage (функция sharepoint для модальных диалогов). Теперь я отключил скрипт, который устанавливает onclick, и попробовал вышеупомянутый jquery, чтобы установить событие щелчка, и в итоге он запускает более 100 модальных диалогов на одной странице …. я думаю, что количество запущенных равно количеству гиперссылок

Ответ №1:

Похоже, это не имеет смысла, если только этот точный обработчик щелчков фактически не привязывается несколько раз. Лучший способ привязки кликов — делегировать (также используя preventDefault вместо return false для хорошей оценки):

 $('#myParent').delegate("a[href*='/RightSizeOption/NewForm.aspx']", "click", function(event) {
  event.preventDefault();
  OpenPopUpPage($(this).attr('href'), RefreshPage); 
});
  

#MyParent — это любой элемент-предок, который, как ожидается, не будет уничтожен; может быть оболочкой div или даже «телом», хотя лучше выбрать ближайшего общего предка, который никогда не будет уничтожен.

Но что меня беспокоит, так это множественная привязка; например, если ваш пример кода находится внутри функции, эта функция запускается несколько раз.

Я также не уверен в «странице обновления», которую вы передаете в OpenPopUpPage. Мне нужно было бы посмотреть, что делает OpenPopUpPage, чтобы даже рискнуть предположить.

Комментарии:

1. Я думаю, вы справились с этим! Я не знаю, как я смотрел мимо этого, мой скрипт перезапускается каждые 200 мс, потому что я использую группировки в SharePoint, и данные не отображаются на странице, пока группировка не будет расширена. Итак, я предполагаю, что мой новый вопрос заключается в том, как мне предотвратить привязку к событию click, если оно уже существует/

2. Если вы делегируете из функции document ready и делегируете предку всех группировок, это обрабатывается автоматически. Еще одна причина предпочесть delegate() вместо click()!

3. На самом деле не понимаю вас здесь? Другие мои проблемы в том, что я использую SharePoint 2010, поэтому все классы и идентификаторы устанавливаются автоматически и могут варьироваться от браузера к браузеру, поскольку SharePoint по-разному отображает страницу… есть предложения?

4. Хорошо, я обнаружил, что все гиперссылки для расширения группировок имеют это общее

5. Когда вы делегируете, вы делаете предка (или родителя, как бы вы ни хотели его обозначить) прослушивателем событий, а не тегом привязки. Итак, вы можете сказать: «элемент тела (или любой другой предок), я хочу, чтобы вы прослушивали клики по якорям с помощью этого href» (согласно моему образцу). Не имеет значения, будут ли добавлены дополнительные теги привязки позже, слушателем по-прежнему является элемент body (или любой другой).