如何取消组合框(SELECT)元素的更改事件。 HTML SELECT元素没有onbefore或onchanging事件。如果我放:选择元素 - 防止选择更改
<SELECT onchange="return false;">
<OPTION value=a>A</OPTION>
<OPTION value=b>B</OPTION>
</SELECT>
事件未取消。
如何取消组合框(SELECT)元素的更改事件。 HTML SELECT元素没有onbefore或onchanging事件。如果我放:选择元素 - 防止选择更改
<SELECT onchange="return false;">
<OPTION value=a>A</OPTION>
<OPTION value=b>B</OPTION>
</SELECT>
事件未取消。
您需要在某处保存<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');
}
});
}
感谢这个不错的解决方案。无论如何,我将使用jQuery。纯HTML解决方案的问题可能是,选择值从js更改,并在处理事件时再次触发onchange事件。 – DraganS
@DraganS:不客气!是的,当onchange激发时,如果你取消它,值仍然会改变。 –
你不想任何人改变价值? – hjpotter92
不,我不想禁用控制。我想显示'警告dlg',所以如果用户选择'取消'选定的值没有改变。我知道以前的值,但我试图通过在显示dlg之前恢复原始值来避免产生小故障。 – DraganS