jQuery onclick селектор не работает

$ ("вход [вводят ='button'] [onclick^ ='save']"),

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

Существует что-то не так с onclick селекторной частью. Существует ли способ сделать обходное решение перекрестного браузера?

Спасибо Pawel

править:

    $("img[src$='scroll.gif']").click(function(){
    var targetOffset = $("input[type='button'][onclick^='save']").offset().top; 
    $("html,body").animate({scrollTop: targetOffset}, 400);
});
5
задан dragonfly 6 May 2010 в 15:29
поделиться

4 ответа

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

$.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);
});
1
ответ дан 13 December 2019 в 05:31
поделиться

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

EDIT: Учитывая критерии ОП, я бы предложил класс (только для использования в качестве селектора), например "jumpToSave". Каждая кнопка должна иметь этот класс, а затем селектор может использовать $(".jumpToSave")

3
ответ дан 13 December 2019 в 05:31
поделиться

Это должно быть похоже на :

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

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

EDIT это то, что вы хотите?

$('img[src="scroll.gif"]').click(function(){
        var targetOffset = $(this).offset().top; 
        $("html,body").animate({scrollTop: targetOffset}, 400);
    });
6
ответ дан 13 December 2019 в 05:31
поделиться

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

Если у вас есть атрибут, подобный этому:

onclick="save();"

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

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

function onclick(event) { save(); }

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

function onclick(){save();}

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

2
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: