$ ("вход [вводят ='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);
});
Вы можете создать собственный селектор (хотя, вероятно, очень неэффективно):
$.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);
});
Есть ли у вас более одной кнопки, которая является кнопкой сохранения? Если нет, то почему бы вам просто не присвоить кнопке id? Это значительно упрощает задачу, а селектор id, который обертывает document.getElementById()
, очень кроссплатформенный. Тогда все, что вам нужно, это $("#buttonID")
.
EDIT: Учитывая критерии ОП, я бы предложил класс (только для использования в качестве селектора), например "jumpToSave". Каждая кнопка должна иметь этот класс, а затем селектор может использовать $(".jumpToSave")
Это должно быть похоже на :
$("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);
});
Вы не можете искать такое значение в атрибутах события. Браузер создает функцию из строкового значения в атрибуте.
Если у вас есть атрибут, подобный этому:
onclick="save();"
Атрибут содержит ссылку на функцию, а не строку. Если вы прочитаете атрибут и получите значение в виде строки, вы получите код функции.
При чтении значения атрибута в Firefox вы получите вот что:
function onclick(event) { save(); }
При чтении атрибута в Internet Explorer вы получите вот что:
function onclick(){save();}
Для идентификации кнопки необходимо использовать другой атрибут.