$( “输入[类型= '按钮'] [^的onclick = '保存']”)
它在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);
});
答案 0 :(得分:6)
应该是这样的:
$("input[type=button]").click(function(){
//do something
});
你应该把它放在document ready函数
中编辑这就是你想要的吗?
$('img[src="scroll.gif"]').click(function(){
var targetOffset = $(this).offset().top;
$("html,body").animate({scrollTop: targetOffset}, 400);
});
答案 1 :(得分:3)
您是否有多个按钮是保存按钮?如果没有,为什么不给你的按钮分配ID?这使得它变得更加简单,并且包含document.getElementById()
的id选择器是非常跨平台的。然后,您只需要$("#buttonID")
。
编辑:鉴于OP的标准,我建议使用一个类(仅用作选择器),例如“jumpToSave”。每个按钮都应该有该类,然后选择器可以使用$(".jumpToSave")
答案 2 :(得分:2)
您无法在事件属性中查找类似的值。浏览器根据属性中的字符串值创建一个函数。
如果你有这样的属性:
onclick="save();"
该属性包含函数引用而不是字符串。如果您读取属性并将值作为字符串获取,则会获得函数的代码。
在Firefox中读取属性值时,这就是你得到的:
function onclick(event) { save(); }
在Internet Explorer中读取属性时,这就是您所获得的:
function onclick(){save();}
您必须使用其他一些属性来识别按钮。
答案 3 :(得分:1)
您可以创建自定义选择器(可能效率非常低):
$.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()和regexps跳过另一个钩子。总而言之,手动维护事件处理程序名称列表要好得多。
编辑:查看您的代码段,似乎没有理由搜索事件处理程序。不是疯狂地抛出属性选择器,而是使用类和id以语义上有意义的方式处理元素,例如。
<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);
});