Селектор jQuery onclick не работает - PullRequest
5 голосов
/ 06 мая 2010

$ ( "вход [тип = 'кнопка'] [OnClick = 'сохранить']")

и работает в FF, но в IE ...

Что-то не так с селекторной частью onclick. Есть ли способ сделать кросс-браузерный обход?

Спасибо, Павел

редактирование:

    $("img[src$='scroll.gif']").click(function(){
    var targetOffset = $("input[type='button'][onclick^='save']").offset().top; 
    $("html,body").animate({scrollTop: targetOffset}, 400);
});

Ответы [ 4 ]

6 голосов
/ 06 мая 2010

Должно быть как:

$("input[type=button]").click(function(){
//do something
});

Вы должны поместить это в документ готов функция

РЕДАКТИРОВАТЬ это то, что вы хотите?

$('img[src="scroll.gif"]').click(function(){
        var targetOffset = $(this).offset().top; 
        $("html,body").animate({scrollTop: targetOffset}, 400);
    });
3 голосов
/ 06 мая 2010

У вас есть более одной кнопки, которая является кнопкой сохранения? Если нет, то почему бы просто не назначить своей кнопке идентификатор? Это делает его намного проще, а селектор идентификатора, который включает document.getElementById(), очень кроссплатформенный. Тогда все, что вам нужно, это $("#buttonID").

РЕДАКТИРОВАТЬ: Учитывая критерии ОП, я бы предложил класс (только для использования в качестве селектора), такой как «jumpToSave». Каждая кнопка должна иметь этот класс, и тогда селектор может использовать $(".jumpToSave")

2 голосов
/ 06 мая 2010

Вы не можете искать такое значение в атрибутах событий.Браузер создает функцию из строкового значения в атрибуте.

Если у вас есть такой атрибут:

onclick="save();"

Атрибут содержит ссылку на функцию, а не строку.Если вы прочитаете атрибут и получите значение в виде строки, вы получите код функции.

При чтении значения атрибута в Firefox вы получите следующее:

function onclick(event) { save(); }

При чтении атрибута в Internet Explorer вы получаете следующее:

function onclick(){save();}

Вам нужно использовать какой-то другой атрибут для идентификации кнопки.

1 голос
/ 06 мая 2010

Вы можете создать собственный селектор (хотя, вероятно, очень неэффективно):

$.extend($.expr[':'], {
  onclick: function(node, index, args, stack) {
    var events = $(node).data('events');
    var fn = args[3];
    if (!events || !events.click) return false;
    for (i in events.click) {
      if (events.click[i].name == fn) return true;
    }
    return false;
  }
});

$("input[type='button']:onclick('save')")

function.name не работает в IE, поэтому вам придется перепрыгивать через другой хук, используя toString () и регулярные выражения,В общем, вам гораздо лучше вручную составлять список имен обработчиков событий.

Редактировать: глядя на ваш фрагмент кода, похоже, что вообще нет причин искать событиеобработчики.Вместо дикого разбрасывания селекторов атрибутов используйте классы и идентификаторы для семантически значимого обращения к вашим элементам, например,

 <img id="scroll-icon" src="icons/scroll.gif" />
 <input id="submit-button" type="submit" onclick="save();" />

, а затем

$("#scroll-icon".click(function(){
  var targetOffset = $("submit-buttton").offset().top; 
  $("html,body").animate({scrollTop: targetOffset}, 400);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...