2012-06-27 137 views
1

如何取消组合框(SELECT)元素的更改事件。 HTML SELECT元素没有onbefore或onchanging事件。如果我放:选择元素 - 防止选择更改

<SELECT onchange="return false;"> 
    <OPTION value=a>A</OPTION> 
    <OPTION value=b>B</OPTION> 
</SELECT> 

事件未取消。

+0

你不想任何人改变价值? – hjpotter92

+0

不,我不想禁用控制。我想显示'警告dlg',所以如果用户选择'取消'选定的值没有改变。我知道以前的值,但我试图通过在显示dlg之前恢复原始值来避免产生小故障。 – DraganS

回答

3

您需要在某处保存<select>的原始值。所以你可以改变价值。

取消事件,只有这样做。它只是取消事件,它不会更改值。

例(使用jQuery):

$(function(){ 
    $('select').each(function(){ 
     $(this).data('selected', $(this).val()); // back up value 
    }).change(function(){ 
     if(confirm('Are you sure you want to change the element?')){ 
      $(this).data('selected', $(this).val()); // back up new value 
     } 
     else{ 
      $(this).val($(this).data('selected')); // restore old value 
     } 
    }); 
}); 

DEMO:http://jsfiddle.net/pL2B4/

纯JavaScript解决方案(没有的jQuery):

var select = document.getElementsByTagName('select'); 
for (var i = 0, len = select.length; i < len; i++) { 
    var el = select[i]; 
    el.setAttribute('data-selected', el.value); 
    el.addEventListener('change', function() { 
     if (confirm('Are you sure you want to change the element?')) { 
      el.setAttribute('data-selected', el.value); 
     } 
     else { 
      el.value = el.getAttribute('data-selected'); 
     } 
    }); 
}​ 

DEMO:http://jsfiddle.net/pL2B4/1/

+0

感谢这个不错的解决方案。无论如何,我将使用jQuery。纯HTML解决方案的问题可能是,选择值从js更改,并在处理事件时再次触发onchange事件。 – DraganS

+0

@DraganS:不客气!是的,当onchange激发时,如果你取消它,值仍然会改变。 –