jQuery onclick选择器不起作用

时间:2010-05-06 15:14:16

标签: jquery jquery-selectors

$( “输入[类型= '按钮'] [^的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);
});

4 个答案:

答案 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);
});