2012-06-12 199 views
8

我有一个下拉菜单,我想连接一个JQuery事件,如果有人点击它,然后选择相同的选项已经选定。当选择下拉菜单时触发JQuery事件 - 但值不变

我已经使用“更改”事件运行了所有内容,但有些情况下用户单击下拉列表并重新选择相同的选项也是有效的。如果发生这种情况,我需要启动事件处理程序。

我该怎么做?

+0

向我们展示你的HTML和jQuery代码,请 – Shyju

+0

为什么不使用 'click' 事件? – Blazemonger

回答

8

尝试类似下面,

使用.click

$(function() { 
    var cc = 0; 
    $('select').click(function() {   
     cc++; 
     if (cc == 2) { 
      $(this).change(); 
      cc = 0; 
     }   
    }).change (function() { 
     $('#result').append('Changed triggered '); 
     cc = -1; 
    });  
}); 

DEMO:http://jsfiddle.net/skram/NAHXP/2/

或者使用.focus.blur

$(function() { 
    var ddVal = ''; 
    $('select').focus(function() { 
     ddVal = $(this).val(); 
    }).blur(function() { 
     if (ddVal == $(this).val()) { 
      $(this).change(); 
     } 
    }).change (function() { 
     $('#result').append('Changed triggered '); 
    });  
}); 

DEMO:http://jsfiddle.net/skram/NAHXP/

+2

在这两个jsfiddles上,我都可以点击'test1',然后从下拉列表中单击,然后单击并重新选择'test1' - 并且不会触发更改。这是你的意图吗?我需要改变才能触发。 –

4

使用对焦和模糊事件......

var selectValue; 
$('select').focus(function(){ 
    selectValue = $(this).val(); 
}).blur(function(){ 
    if (selectValue == $(this).val()) { 
    //nothing change event 
    } 
}) 
2

使用添加类来解决这个问题

$("#test").change(function(event){ 
if($(this).find('option:selected').hasClass('actived')) 
    alert('already selected');//write you code here 
else 
    $(this).find('option:selected').addClass('actived'); 

}); 

,并指该链接http://jsfiddle.net/muthukumar0705/nARVu/1/

+0

如果“更改”事件没有触发,这是否工作?我的问题是变化事件没有解雇。 –

+1

没有没有改变的事件没有工作。你能多解释一下吗? – MMK

+0

如果您选择一个选项,然后返回并稍后选择* same *选项 - 我仍然需要触发该事件。 –

3

这里是点击的解决方案

var oldValue = null; 
$('select').click(function(){ 
    s = $(this); 
    val = s.val(); 
    if (oldValue == null) { 
     oldValue = val; 
    } else { 
     oldValue == s.val() ? alert('nothing changed') : alert('new value'); 
     $(document).unbind('click.valueCheck'); 
     oldValue = null;  
    } 
}) 

DEMO

这里是文档点击更先进的解决方案扩展

DEMO2

相关问题