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

我有一个下拉列表: <asp:DropDownList id="dropdownid" runat="server" class=blah"/>


在我的jQuery中,我分配更改事件是这样的:


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

现在,当我从下拉列表中选择不同的值时,此方法有效,但是,假设我要再次选择相同的值。(因为我想使用相同的值进行另一个调用)因此,当我再次选择它时(不更改值),只需单击下拉菜单中的选定值并再次“选择”它,就不会触发任何事件。我必须分配给jquery中的另一个事件吗?有什么解决方法?


jQuery HTML-选择


慕的地8271018
浏览 1128回答 3
3回答

繁星淼淼

为了扩展Vincent Ramdhanie的建议,请看做这样的事情。本质上,您最终拥有了自己的jQuery函数,可以在其他地方重用。步骤1:创建jQuery函数(function($) {&nbsp; &nbsp; $.fn.selected = function(fn) {&nbsp; &nbsp; &nbsp; &nbsp; return this.each(function() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var clicknum = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(this).click(function() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clicknum++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (clicknum == 2) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clicknum = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fn(this);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }})(jQuery);步骤2:确保引用了新创建的jQuery Function的文件以供使用:<script src="Scripts/jqDropDown.js" type="text/javascript"></script>步骤3:使用新功能:$('#MyDropDown').selected(function() {&nbsp; &nbsp; //Do Whatever...});原始信息使用当前代码库,从asp:DropDownList中选择相同的值将不会触发更改事件。您可以尝试为.blur事件添加另一个jQuery函数。当控件失去焦点时将触发:$('#dropdownid').blur(function() {......});如果模糊功能对您不起作用,我将添加一个刷新按钮或会影响您尝试使用的功能的东西。

月关宝盒

尝试这个:$(document).ready(function(){&nbsp;var clicknum = 0;&nbsp;$("#dropdownid").click(function(){&nbsp; &nbsp; clicknum++;&nbsp; &nbsp; if(clicknum == 2){&nbsp; &nbsp; &nbsp; &nbsp; alert($(this).val());&nbsp; &nbsp; &nbsp; &nbsp; clicknum = 0;&nbsp; &nbsp; }&nbsp;});});首先,您要创建一个变量clicknum来跟踪点击次数,因为您不希望用户每次单击下拉框时都触发该事件。第二次单击是用户所做的选择。如果click num恰好是2,则是第二次单击,因此触发该事件,并在下次将clicknum重置为0。否则什么都不做。

交互式爱情

当前的许多解决方案在很多情况下都会失效。任何依赖两次检查点击次数的解决方案都非常善变。要考虑的一些方案:如果单击,然后先关闭,然后再打开,它将同时计入点击和触发次数。在firefox中,只需单击鼠标即可打开菜单并将其拖动到选定的选项,而无需抬起鼠标。如果您使用键盘击键的任意组合,则可能会使点击计数器不同步或完全错过更改事件。您可以使用Alt+ ↕(或Spacebar在Chrome和Opera中使用)打开下拉菜单。当下拉列表具有焦点时,任何箭头键都将更改选择打开下拉菜单后,单击Tab或Enter将进行选择这是更全面的扩展:查看是否已选择选项的最可靠方法是使用change事件,您可以使用jQuery的.change()处理程序进行处理。剩下要做的唯一事情就是确定是否再次选择了原始元素。在任何情况下,这个问题被问了很多(一,二,三)而没有一个很好的答案。最简单的方法是检查元素上是否存在clickor keyup事件,但Chrome,IE和safari似乎不支持元素上的事件,即使它们在w3c建议中也是如此option:selectedoptionSelect元素内部似乎是一个黑匣子。如果您监听事件,甚至无法分辨事件发生在哪个元素上,或者列表是否打开。接下来最好的事情似乎是处理blur事件。这将表明用户已将注意力集中在下拉列表上(也许看到了列表,也许没有看到),并决定要保留原始值。要立即继续处理更改,我们仍将订阅该change活动。为了确保我们不会重复计算,如果更改事件被引发,我们将设置一个标志,这样我们就不会触发两次:码:(function ($) {&nbsp; &nbsp; $.fn.selected = function (fn) {&nbsp; &nbsp; &nbsp; &nbsp; return this.each(function () {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(this).focus(function () {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.dataChanged = false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).change(function () {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.dataChanged = true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fn(this);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).blur(function (e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!this.dataChanged) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fn(this);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; };})(jQuery);然后像这样调用:$("#dropdownid").selected(function (e) {&nbsp; &nbsp; alert('You selected ' + $(e).val());});
打开App,查看更多内容
随时随地看视频慕课网APP