为了账号安全,请及时绑定邮箱和手机立即绑定

每次使用jQuery选择DropDownList项目时都会触发事件

每次使用jQuery选择DropDownList项目时都会触发事件

慕的地8271018 2019-11-29 14:25:50
我有一个下拉列表: <asp:DropDownList id="dropdownid" runat="server" class=blah"/>在我的jQuery中,我分配更改事件是这样的:$('#dropdownid').change(function() {......});现在,当我从下拉列表中选择不同的值时,此方法有效,但是,假设我要再次选择相同的值。(因为我想使用相同的值进行另一个调用)因此,当我再次选择它时(不更改值),只需单击下拉菜单中的选定值并再次“选择”它,就不会触发任何事件。我必须分配给jquery中的另一个事件吗?有什么解决方法?jQuery HTML-选择
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

为了扩展Vincent Ramdhanie的建议,请看做这样的事情。本质上,您最终拥有了自己的jQuery函数,可以在其他地方重用。


步骤1:创建jQuery函数


(function($) {

    $.fn.selected = function(fn) {

        return this.each(function() {

            var clicknum = 0;

            $(this).click(function() {

                clicknum++;

                if (clicknum == 2) {

                    clicknum = 0;

                    fn(this);

                }

            });

        });

    }

})(jQuery);

步骤2:确保引用了新创建的jQuery Function的文件以供使用:


<script src="Scripts/jqDropDown.js" type="text/javascript"></script>

步骤3:使用新功能:


$('#MyDropDown').selected(function() {

    //Do Whatever...

});

原始信息

使用当前代码库,从asp:DropDownList中选择相同的值将不会触发更改事件。


您可以尝试为.blur事件添加另一个jQuery函数。当控件失去焦点时将触发:


$('#dropdownid').blur(function() {......});

如果模糊功能对您不起作用,我将添加一个刷新按钮或会影响您尝试使用的功能的东西。


查看完整回答
反对 回复 2019-11-29
?
月关宝盒

TA贡献1772条经验 获得超5个赞

尝试这个:


$(document).ready(function(){

 var clicknum = 0;

 $("#dropdownid").click(function(){

    clicknum++;

    if(clicknum == 2){

        alert($(this).val());

        clicknum = 0;

    }

 });

});

首先,您要创建一个变量clicknum来跟踪点击次数,因为您不希望用户每次单击下拉框时都触发该事件。第二次单击是用户所做的选择。


如果click num恰好是2,则是第二次单击,因此触发该事件,并在下次将clicknum重置为0。否则什么都不做。


查看完整回答
反对 回复 2019-11-29
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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


要考虑的一些方案:

如果单击,然后先关闭,然后再打开,它将同时计入点击和触发次数。

在firefox中,只需单击鼠标即可打开菜单并将其拖动到选定的选项,而无需抬起鼠标。

如果您使用键盘击键的任意组合,则可能会使点击计数器不同步或完全错过更改事件。

您可以使用Alt+ ↕(或Spacebar在Chrome和Opera中使用)打开下拉菜单。

当下拉列表具有焦点时,任何箭头键都将更改选择

打开下拉菜单后,单击Tab或Enter将进行选择

这是更全面的扩展:

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


剩下要做的唯一事情就是确定是否再次选择了原始元素。在任何情况下,

这个问题被问了很多(一,二,三)而没有一个很好的答案。


最简单的方法是检查元素上是否存在clickor keyup事件,但Chrome,IE和safari似乎不支持元素上的事件,即使它们在w3c建议中也是如此option:selectedoption


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());

});


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 1127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信