2

我在我的网站上使用 jQuery 1.7.1,并将该.live()函数用于一些需要在未来添加的元素上调用的事件。由于某种原因它不起作用(没有错误,没有警报,没有显示任何内容)。我读了一点,有些人说它不起作用,而另一些人说它工作正常,但我没有看到任何解决方法、修复或任何最新的东西。它在其他浏览器中运行良好,只是在 IE9(可能还有其他 IE)中不行。

我可以使用 jQuery 中的 .live 替代方法、插件或一些解决方法吗?

我目前的代码如下:

$('select[name="CourseLevelSelector"] option').live('dblclick', function () {
    //Do Stuff
});

-杰克

编辑:

总而言之,我的目标是我有 2 个多个选择框,一个包含数据,另一个为空白。当您双击包含数据的选择框中的选项时,它将自身复制到空选择中。如果您然后双击已添加的选项,它将完全删除它。(此代码有效,只是事件处理程序无效)

HTML 看起来是这样的:

<select name="CourseLevelSelector" multiple="multiple">
    <option value="1">First</option>
    <option value="2">Second</option>
    <option value="3">Third</option>
</select>
<select name="CourseLevelIDs" multiple="multiple">

</select>
4

3 回答 3

3

在 IE 中,option元素没有点击事件,只有select元素。您需要将事件绑定到选择对象。

在 IE 中尝试这个测试应用程序来查看问题:http: //jsfiddle.net/jfriend00/JGrbh/

每,你更多的请求披露你实际上想要做什么,你可以像这样http://jsfiddle.net/jfriend00/Ry9Ns/使用动态形式.on()而不是 deprecated来修复它.live()

$("#container").on('dblclick', 'select[name="CourseLevelSelector"]', function(e) {
    var ids = $('select[name="CourseLevelIDs"]');
    $(this).find(":selected").each(function() {
        // make sure selected item is not already in the other list
        if (!ids.find('[value="' + this.value + '"]').length) {
            $(this).clone().appendTo(ids);
        }
    });

})


$("#container").on('dblclick', 'select[name="CourseLevelIDs"]', function(e) {
    $(this).find(":selected").remove();
})​
于 2012-04-11T16:36:03.003 回答
0

根据 jfriend00 提供的信息,我找到了解决此问题的方法

由于 IE 不支持选项标签的点击处理程序,因此这是我所做的:

$('select[name="CourseLevelSelector"]').live('dblclick', function () {
    var doubleClickedOption = $(this).find(':selected');

    //Do Stuff
});

它处理选择框本身的双击,并将所选项目作为 jquery 对象获取,以便在代码中使用。

-杰克

于 2012-04-11T17:00:52.743 回答
-1

尝试jQuery.on,因为您使用的是 1.7 版本的 jQuery。

或者

如果有一些 IE 对它敏感的标记问题。它通常发生在 Div ID 命名约定中。

于 2012-04-11T16:28:23.293 回答