2013-06-24 48 views
0

當選擇一個新的選項jQuery的.change事件可以被用來獲取在select所選值:獲取即使它並沒有改變所選的選項

$('select').change(function() { 
    var selectedValue = $('option:selected').val(); 
    console.log(selectedValue); 
}); 

我怎樣才能獲得值,如果選擇選項沒有改變?

即選擇「選項1」。然後用戶再次選擇'選項1'。我需要 以獲得此時的價值。

.onchange在這些情況下不起火。

有沒有可以使用的另一個事件?

Here's a fiddle

+0

你就不能讀根據需要的價值? - 爲什麼你需要它綁定到一個事件? –

+0

這是一款手機導航菜單。我需要用戶選擇菜單項時的值 – Turnip

+0

使用點擊事件代替 – hAlE

回答

1

試試這個.. 第一警報會給不變值。

var defaultVal = $('select').val(); 
alert(defaultVal); 
$('select').change(function() { 
    var selectedValue = $(this).val(); 
alert(selectedValue); 
});  
+0

嘗試選擇已選擇的選項http://jsfiddle.net/cR3MQ/7/不起作用 – Turnip

1

您可以使用點擊甚至選擇,我不知道,如果它適用於所有的瀏覽器 簽出的文檔 here,這樣你可以得到的選項

+0

已經嘗試過。 '.click'在選項上不起作用。在鉻至少。 http://jsfiddle.net/cR3MQ/6/ – Turnip

+0

我也試過了,它在Firefox上工作。 – bitkot

0

嘗試像任何點擊事件這樣的:

(function($) { 
    $.fn.selected = function(fn) { 
     return this.each(function() { 
      var clicknum = 0; 
      $(this).click(function() { 
       clicknum++; 
       if (clicknum == 2) { 
        clicknum = 0; 
        fn(this); 
       } 
      }); 
     }); 
    } 
})(jQuery); 

$('select').selected(function(val) { 
    alert(val.value) 
}); 

DEMO-- >http://jsfiddle.net/cR3MQ/5/

+0

你的演示對我來說不適用於Chrome。無論選擇什麼,都不會提醒任何人? – Turnip

+0

@ 3rror404對我來說工作正常.. :) –

0

試試這個。通過了IE11和FireFox 35.01的測試。 這一個避免了這個bug,在Dhaval Marthak的代碼示例中,無論您是否點擊該選項,它都會在第二次點擊時調用該函數。

更多: http://jsfiddle.net/cR3MQ/11/

(function($) { 
    $.fn.selected = function(fn) { 
     return this.each(function() { 
      var $select = $(this); 
      var val = $select.val(); 
      $(this).children('option').on('click',function() { 
       if(val === $(this).val()){ 
        $select.trigger('unchange'); 
       }else{ 
        // $select.trigger('change'); 
       } 
       fn(this); 
       val = $select.val(); 
      }); 
     }); 
    } 
})(jQuery); 

$('select').selected(function(val) { 
    alert(val.value) 
}).on('unchange',function(){ 
    alert('unchange'); 
}).on('change',function(){ 
    alert('change'); 
}); 

支持鉻(版本40.0.2214.115m),Firfox 35.01,IE 11: http://jsfiddle.net/cR3MQ/13/

(function($) { 
    $.fn.selected = function(fn) { 
     return this.each(function() { 
      var $select = $(this); 
      var val = $select.val(); 
      var optionClick = false; 
      $(this).children('option').each(function(i,e){ 
       $(this).get(0).onclick = function() { 
        optionClick=true; 
        if(val === $(this).val()){ 
         $select.trigger('unchange'); 
        }else{ 
         // $select.trigger('change'); 
        } 
        fn(this); 
        val = $select.val(); 
       } 
      }); 

      var clicked = 0, changed = 0; 
      $select.on('change',function(){ 
       changed++; 
      }).on('click',function(ev){ 
       if(true === optionClick){ 
        /*do nothing*/     
       }else{ 
        if(0 === changed && 0 > ev.offsetX && 0 > ev.offsetY){ 
         $select.trigger('unchange'); 
          fn(this); 
        }else{    
         changed = 0; 
        } 
       } 
      }); 
     }); 

    } 
})(jQuery); 

$('select').selected(function(val) { 
    console.log(val.value) 
}).on('click',function(ev){ 
    //console.log(ev); 
}).on('unchange',function(){ 
    console.log('unchange'); 
}).on('change',function(){ 
    console.log('change'); 
}); 
+0

無法在Chrome,Firefox或Safari上使用Mac – Turnip

+0

感謝您的提及。我做了一些鉻的升級(沒有safari currenly),我的firefox是35.01(這對第一/第二解決方案的工作)。現在看到:http://jsfiddle.net/cR3MQ/13/ –

+0

@uʍopǝpısdn。在嘗試儘可能合理地識別它之後,我猜測沒有使用瀏覽器檢測插件或自繪UI(例如https://github.com/jquery-collection/jQuery-Skinner)。我們無法爲所有瀏覽器兼容編碼。另外,我攻擊了Windows7中支持Safari的解決方案,我不建議(http://jsfiddle.net/cR3MQ/14/)。 –

0
$('.yourSelect option').click(function() { 
    var selectedValue = $('.yourSelect').val(); 
    console.log(selectedValue); 
}); 
+1

最好給你的答案增加一些解釋,以便海報知道它爲什麼可以起作用。 –

相關問題