如何在类选择器过滤器上使用JQuery'on()'?

时间:2011-12-19 20:10:46

标签: jquery

尝试将某些旧代码从live()更新为使用on(),而且某些内容失败了。

$('#accordion').on('click','.EditModeDetails', function(event){
    alert('yay');
});

其中.EditModeDetails是注入HTML的类,如下所示:

<li class="instructionText">
    <input value="EditModeDetails" class="EditModeDetails" name="EditModeDetails" type="checkbox">
    <label for="EditModeDetails">Edited text replaces existing text.  To add new text, check this box </label>
</li>

...而#accordion是一个在页面加载时加载的手风琴控件。

如果我删除了过滤器,那么:

$('#accordion').on('click', function(event){
    alert('yay');
});

....我收到了所有地方的警报。

已经查看了一个使用类而不是元素选择器且没有运气的示例。

编辑:非常感谢你们提出的建议,但到目前为止一切都没有。加载的JQuery版本是ver-1.7.1。以下是实际开发的链接:

http://esc.toypizza.com/sysalert

要查看问题,请在数据表中点击http://esc.toypizza.com/_img/details_open.png,然后点击显示的http://esc.toypizza.com/_img/up_arrow.png。接下来,单击手风琴部分“详细信息”(默认情况下打开的“当前问题”部分上方)。您将看到“清除”按钮右侧的违规复选框。

4 个答案:

答案 0 :(得分:1)

我认为你有一个公开的div,搞乱一切。

<!--Accordian-->

<div id="accordion" class="invis">

    <h3><a href="#">Categories</a></h3>

<div><!--Accordian- panel OPEN-->

div#accordion关闭了几行,但是注释Accordian- panel OPEN的div未关闭。这导致手风琴被误导,并且一些元素位于复选框的顶部,这就是事件没有到达复选框的原因。

答案 1 :(得分:0)

修改

我用未来的dom元素及其工作

制作了一个样本

http://jsfiddle.net/vczLh/2/

您的代码必须有其他内容。

1)你确定使用1.7 +?

1.5)尝试做:(用于测试)

$('#accordion').on('click','.instructionText', function(event){
    alert('yay');
});

1.7)使用/>

关闭复选框元素

告诉我它是否罚款(我们会从那里继续)

2)请上传更多代码

3)提高你的接受率。

4)你的代码很好(从我看到的)

答案 2 :(得分:0)

阻止事件冒泡并在前往li

的路上调用所有#accordion点击

这是您所拥有的problem,这里是fix

$('#accordion').on('click','.EditModeDetails', function(event){
event.stopPropagation();
    alert('yay');
});

答案 3 :(得分:0)

有些元素在复选框上,因为你没有得到事件触发

可能你应该检查一些其他的HTML

  • 您在某些元素中使用无引号属性定义,我知道如果您声明HTML5 doctype <!DOCTYPE html>
  • ,这是可以的
  • 有一个未关闭的链接<link type="text/css" rel="stylesheet" href="/_css//escalate.css">