2012-06-12 234 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

相關問題