2013-06-26 67 views
8

使用JQuery或JavaScript,我想檢測用戶何時選擇一個值,即使它們沒有更改已選擇的值。即使未更改,也會選擇JQuery檢測下拉值

這是如何實現的?

我試過 -

$('#MyID').select(function(){ /*my function*/ }); 

$('#MyID').change(function(){ /*my function*/ }); //nothing changing, so this fails 

但他們沒有工作。

示例 - 我有一個下拉列表,其中沒有任何選定的年份列表,用戶選擇「1976」,我運行一個函數。選擇「1976」後,用戶再次點擊下拉菜單並再次選擇「1976」,我想再次運行該功能。

+4

你不能,因爲選擇相同的值不發生變化,這是相同的。也許你可以只聽點擊這個元素,這就像你在不違反默認瀏覽器行爲的情況下一樣。 – adeneo

+0

也許試試聽點擊'選項'? –

+0

@AndrewPeacock - 選項元素不會在所有瀏覽器中觸發鼠標事件。 – adeneo

回答

0

你試過.blur()

$('#MyID').blur(function(){ 
    //my function 
}); 

請注意,您必須在功能觸發前點擊頁面下拉菜單之外的某處。我不知道這是否可以通過。

JsFiddle here

+0

可悲的是,這沒有工作,彼得河感謝嘗試。 –

+0

您也可以嘗試'.focusin()'和'.blur()',它在Chrome中爲我工作(請參閱小提琴)。 –

+0

當我選擇已經選擇的相同值時,會發生這種情況。 –

0

嘗試......

若要選擇的選項的值...

$("body").click(function(event) { 
    if(event.target.nodeName== "SELECT"){ 
       selectedValue = event.target.value; 
      } 
}); 

,然後得到的值

var text = $("option").filter(function() { 
     return $(this).attr("value") === selectedValue; 
    }).first().text(); 
0

文本你有沒有嘗試類似於:

$('#MyID li').click(function(){ //my function }); 

在這裏,您正在檢測點擊您的下拉列表中的列表元素,這應該是不同的選項。 (如果你的HTML略有不同,只是檢查一下,看看所有選項的共同點,是什麼樣的元素是什麼人?)

+0

Nevermind ...我剛剛意識到這個HTML是由於我使用的插件,我嘗試使用選項元素,如$('#MyID option')。click(...)'但這不起作用,對不起! – quantka

0
$('#MyID option').hover(function(){ 
    //user is on an option, but not selected it yet 
},function(){ 
    //user left an option without selecting 
}).click(function(){ 
    //user clicked on an option, selecting it 

}); 
5

所有系統至少去(在第二次點擊... )

將開關設置爲在選擇時運行,並在開關被捕獲後和/或在blur上覆位。

var go = false;//switch off 
$('#MyID').on('click',function() {//on click 
    if (go) {//if go 
     //do stuff here with $(this).val() 
     go = false;//switch off 
    } else { go = true; }//if !go, switch on 
}).on('blur', function() { go = false; });//switch off on blur 

做出了小提琴:http://jsfiddle.net/filever10/2XBVf/

編輯:支持鍵盤爲好,這樣的事情應該工作。

var go = false;//switch off 
$('#MyID').on('focus active click',function() {//on focus/active 
    doit($(this));//do it 
}).on('change', function() { 
    go=true;//go 
    doit($(this));//and doit 
}).on('blur', function() { go = false; });//switch off on blur 

function doit(el) { 
    if (go) {//if go 
     //do stuff here with el.val() 
     go = false;//switch off 
    } else {go=true}//else go 
} 

做出了小提琴:http://jsfiddle.net/filever10/TyGPU/

+0

這不起作用,當用戶選項卡上的選擇... – DemonGyro

+1

正確的,如果OP已經指定,我會做更多的東西[this](http://jsfiddle.net/filever10/TyGPU/) – FiLeVeR10

+0

@ABogus是否解決了您的問題? – FiLeVeR10

0

試試這個代碼。

$("#MyID").click(function(){ 
    alert($("#MyID").val()); 
}); 

Try Here!

0

我做了一個工作只的jsfiddle在Firefox測試。我已經設法通過向選擇框添加一個虛擬選項來做你想做的事情。該虛擬選項的樣式爲display:none,並且在選項列表中不可見。

DEMO

<select id="myselect"> 
    <option value="1">one</option> 
    <option value="2">two</option> 
    <option value="3" selected="selected">three</option> 
    <option value="4">four</option> 
    <option class="dummy" style="display:none">dummy</option> 
</select> 



$('#myselect').on('focus',function(){  
    $(this).find("option.dummy").prop("selected", true); 
}); 

$('#myselect').on('change',function(){ 
    var select=$(this); 
    var text=select.find("option:selected").text(); 

    $('.dummy').attr('value',select.val()).text(text); 
    alert(select.val()); 


}); 
相關問題