【问题标题】:how to run a jquery function on dropdown selection [duplicate]如何在下拉选择中运行jquery函数[重复]
【发布时间】:2014-06-17 07:38:55
【问题描述】:

我有一个名为 Filtername 的简单下拉列表。当从列表中选择一个值时,我想运行一个函数。下面我已经试过了

$('#FilterName').change(function() {
         code1;
         code2;
    }

问题在于它仅在所选值更改时才有效。即使用户从下拉列表中再次选择相同的值,我也想运行该函数。所以我需要在值被选中时运行该函数。我尝试了 .select/.submit 函数,但它们不起作用。请帮忙.....

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    来自我对Fire event each time a DropDownList item is selected with jQuery的回答:

    很多当前的解决方案会在很多情况下失效。任何依赖于两次检查点击计数的解决方案都将是非常善变的。

    需要考虑的一些场景:

    • 如果您点击,然后关闭,然后再打开,它将同时计算点击次数和触发次数。
    • 在 Firefox 中,您只需单击鼠标即可打开菜单并拖动到所选选项,而无需抬起鼠标。
    • 如果您使用键盘敲击的任意组合,您可能会导致点击计数器不同步或完全错过更改事件。
      • 您可以使用 Alt+(或 Chrome 和 Opera 中的 空格键)打开下拉菜单。
      • 当下拉菜单有焦点时,任何箭头键都会改变选择
      • 当下拉菜单打开时,单击 TabEnter 将进行选择

    这是一个更全面的扩展:

    查看是否选择了选项的最可靠方法是使用change 事件,您可以使用jQuery 的.change() 处理程序来处理它。

    唯一剩下要做的就是确定是否再次选择了原始元素。
    在任何情况下都没有很好的答案。

    最简单的做法是检查option:selected 元素上是否有clickkeyup 事件Chrome, IE, and safari don't seem to support events on option elements,即使它们在w3c recommendation

    Select 元素内部似乎是一个黑盒子。如果您在其上收听事件,您甚至无法判断事件发生在哪个元素上或列表是否打开。

    接下来最好的事情似乎是处理blur 事件。这将表明用户已将注意力集中在下拉列表上(也许看到了列表,也许没有)并做出了他们想要坚持原始值的决定。要立即继续处理更改,我们仍将订阅 change 事件。并且为了确保我们不会重复计算,如果更改事件被引发,我们将设置一个标志,这样我们就不会回击两次:

    代码:

    (function ($) {
        $.fn.selected = function (fn) {
            return this.each(function () {
                $(this).focus(function () {
                    this.dataChanged = false;
                }).change(function () {
                    this.dataChanged = true;
                    fn(this);
                }).blur(function (e) {
                    if (!this.dataChanged) {
                        fn(this);
                    }
                });
            });
        };
    })(jQuery);
    

    然后这样调用:

    $("#dropdownid").selected(function (e) {
        alert('You selected ' + $(e).val());
    });
    

    Updated example in jsFiddle

    【讨论】:

    • 谢谢凯尔。这正是我想要的......
    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2021-11-05
    • 2013-08-10
    • 2022-01-05
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多