【问题标题】:jQuery event delegation for select/options in ChromeChrome 中选择/选项的 jQuery 事件委托
【发布时间】:2010-08-05 20:49:39
【问题描述】:

我正在尝试将一个简单的点击事件绑定到下拉的选定选项。

$('select#myselect').delegate(':selected', 'click', function()  
{  
    alert('selected');  
});

此代码适用于 Firefox,但不适用于 Chrome/Safari。我可以使用 .delegate() 为这样的下拉菜单绑定选项吗?如果是这样,怎么做?如果不是,最好的替代解决方案是什么?

顺便说一句,jQuery Click on Event.. 提供了一个使用 .change() 的潜在解决方案,但如果可能的话,我想用 .delegate() 管理所有绑定。

【问题讨论】:

    标签: jquery select binding delegates google-chrome


    【解决方案1】:

    click event 不会针对这些浏览器中的 <option> 元素触发,但无论您的选项是否发生变化,都没有什么不同:

    $('#myselect').change(function() {  
      alert('selected, my new value is: ' + $(this).val());  
    });
    

    归根结底,这里不需要.delegate().delegate() 用于侦听 bubble up 来自后代元素的事件,这些事件可能会改变或非常多,当元素本身不会去任何地方时(例如通过 AJAX 替换)。 .live() 的工作方式非常相似,它只是一直监听 document

    除此之外,我不知道有什么更好的解释方式:您当前的用法根本不是 .delegate() 的用途,它旨在解决不同的问题。你应该在这里使用.change()

    【讨论】:

    • 感谢您的解释 - 效果很好。这是最佳绑定实践这一事实的错误之处在于,必须使用多个 jQuery 方法来创建和管理绑定。这似乎创建了难以管理绑定的非模块化代码。也许有一个插件可以解决这个问题?也许是为未来的 jQuery 版本计划的一个已知问题?或者,对于 jQuery 中绑定的整体策略,我可能有一些不明白的地方。任何想法/链接将不胜感激。
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多