每次使用jQueryselectDropDownList项目时触发事件
我有一个下拉列表: <asp:DropDownList id="dropdownid" runat="server" class=blah"/>
在我的jQuery中,我指定了这样的更改事件:
$('#dropdownid').change(function() {......});
现在,这个工作,当我从下拉列表中select不同的值,但是我们说我想再次select相同的值。 (因为我想再次调用相同的值)所以,当我再次select它(不更改值),只需点击从下拉列表中select的值,并再次“select”,没有事件触发。 jquery中有另一个事件,我必须分配给它吗? 什么是解决方法?
为了扩大文森特·拉姆丹尼的build议,请看看这样的事情。 基本上,你最终得到你自己的jQuery函数,你可以在别处重新使用。
第1步 :创buildjQuery函数
(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步 :确保新创build的jQuery函数的文件被引用使用:
<script src="Scripts/jqDropDown.js" type="text/javascript"></script>
第三步 :利用新function:
$('#MyDropDown').selected(function() { //Do Whatever... });
原始信息
使用您当前的代码库,从asp:DropDownList中select相同的值将不会触发更改事件。
您可以尝试为.blur事件添加另一个jQuery函数。 当控制失去焦点时,这将会激发:
$('#dropdownid').blur(function() {......});
如果他们模糊function不适合你,我会添加一个刷新button或什么的影响,激发你试图利用的function。
尝试这个:
$(document).ready(function(){ var clicknum = 0; $("#dropdownid").click(function(){ clicknum++; if(clicknum == 2){ alert($(this).val()); clicknum = 0; } }); });
首先,您要创build一个variablesclicknum来跟踪点击次数,因为您不希望每次用户单击下拉框时触发该事件。 第二次点击是用户所做的select。
如果点击数量恰好是2,那么这是第二次点击,所以触发该事件并在下次将clicknum重置为0。 否则什么都不要做
只需将click事件处理程序连接到随附的选项控件而不是select:
$('#dropdownid option').click(function() {......});
只有当您从下拉列表中select一个选项时,这个选项才会激活,不pipe它是否发生变化。
根据API :
当控件失去input焦点并且自从获得焦点后其值被修改时,更改事件触发。
您可能想尝试mousedown或点击事件作为替代。
目前很多解决scheme都会在很多情况下破解。 任何依靠检查点击次数的解决scheme都将变得非常浮躁。
需要考虑的一些场景:
- 如果你点击,然后closures,然后再打开,它会计数点击和火灾。
- 在Firefox中,你可以打开菜单只需单击鼠标,并拖动到选定的选项,而不必提起你的鼠标。
- 如果使用任何键盘敲击组合,您可能会使点击计数器不同步,或完全错过更改事件。
- 您可以使用Alt + ↕ (或Chrome和Opera中的空格键 )打开下拉菜单。
- 当下拉菜单有焦点时,任何方向键都会改变select
- 当下拉菜单打开时,单击Tab或Enter将进行select
这是一个更全面的扩展:
查看选项是否被选中的最可靠的方法是使用change
事件,您可以使用jQuery的.change()
处理程序来处理这个事件。
剩下的唯一的事情是确定是否再次select原始元素。
在很多情况下,这个问题已经被问了很多( 一 , 二 , 三 )。
要做的最简单的事情是检查是否有一个click
或keyup
事件的option:selected
元素, 但铬,IE浏览器和Safari浏览器似乎不支持事件的option
元素 ,即使他们在W3Cbuild议
Select
元素内部似乎是一个黑匣子。 如果你听它的事件,你甚至不能告诉事件发生在哪个元素上,或者列表是否打开。
接下来的最好的事情,似乎处理blur
事件。 这将表明用户已经关注下拉列表(可能看到列表,也许不是),并作出决定,他们想坚持原来的价值。 要继续处理更改,我们仍然会订阅change
事件。 为了确保我们不会重复计算,如果更改事件发生,我们将设置一个标志,以便不发生两次reflection:
码:
(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()); });
在jsFiddle中更新了示例
看看这个解决scheme:
http://ledomoon.blogspot.com/2009/12/dropdown-selected-change-event-by.html
$(document).ready(function () { // select all the divs and make it invisible $("div.Content").css("display", "none"); // Find all the combos inside the table or gridview $("#tblItems").find("select.Status").each(function () { // Attached function to the change event of each combo $(this).change(function () { if ($(this).val() == "test1") { // Change the visibility of the next div after the selected combo if the selected value = test1 $(this).parent().find("div.Content").fadeIn("slow"); //css("display","block"); } else { $(this).parent().find("div.Content").fadeOut("slow"); //.css("display","none"); } }); }); });
希望这可以帮助
您遇到的这个问题是由于客户端对基本selectHTML的处理。 由于大多数客户不会标记一个不变的,你将不得不尝试不同的东西。
我可能会添加一个“刷新”button或类似的东西,但我是一个开发人员,而不是一个devise师,所以我可能是错的。 🙂
下拉菜单中select的项目反映了已经做出的select。
我的build议是重置下拉到一个默认值,如“select…”,每当需要的行动完成。 所以,如果用户需要执行操作A两次,下拉将在每个操作后重置。
- 用户从下拉列表中select操作A.
- 操作A被执行并且下拉被重置。
- 用户从下拉列表中select操作A.
- 操作A被执行并且下拉被重置。
希望这可以帮助,
丰富
对我来说,以下解决scheme工作正常:
$("#dropdownid select").click(function() { alert($("#dropdownid select option:selected").html()); });
也:
$('#dropdownid select option').click(function() { .... }