每次使用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
    • 当下拉菜单打开时,单击TabEnter将进行select

这是一个更全面的扩展:

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

剩下的唯一的事情是确定是否再次select原始元素。
在很多情况下,这个问题已经被问了很多( 一 , 二 , 三 )。

要做的最简单的事情是检查是否有一个clickkeyup事件的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两次,下拉将在每个操作后重置。

  1. 用户从下拉列表中select操作A.
  2. 操作A被执行并且下拉被重置。
  3. 用户从下拉列表中select操作A.
  4. 操作A被执行并且下拉被重置。

希望这可以帮助,

丰富

对我来说,以下解决scheme工作正常:

 $("#dropdownid select").click(function() { alert($("#dropdownid select option:selected").html()); }); 

也:

 $('#dropdownid select option').click(function() { .... }