試試這個。通過了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');
});
你就不能讀根據需要的價值? - 爲什麼你需要它綁定到一個事件? –
這是一款手機導航菜單。我需要用戶選擇菜單項時的值 – Turnip
使用點擊事件代替 – hAlE