CMP*_*mer 5 html javascript jquery internet-explorer
考虑以下示例代码:
<div class="containter" id="ControlGroupDiv">
<input onbeforeupdate="alert('bingo 0'); return false;" onclick="alert('click 0');return false;" id="Radio1" type="radio" value="0" name="test" checked="checked" />
<input onbeforeupdate="alert('bingo 1'); return false;" onclick="alert('click 1');return false;" id="Radio2" type="radio" value="1" name="test" />
<input onbeforeupdate="alert('bingo 2'); return false;" onclick="alert('click 2');return false;" id="Radio3" type="radio" value="2" name="test" />
<input onbeforeupdate="alert('bingo 3'); return false;" onclick="alert('click 3');return false;" id="Radio4" type="radio" value="3" name="test" />
<input onbeforeupdate="alert('bingo 4'); return false;" onclick="alert('click 4');return false;" id="Radio5" type="radio" value="4" name="test" />
<input onbeforeupdate="alert('bingo 5'); return false;" onclick="alert('click 5');return false;" id="Radio6" type="radio" value="5" name="test" />
</div>
Run Code Online (Sandbox Code Playgroud)
在FireFox 2和3 return false上,单击单选按钮的单击事件可防止它的值以及组中所有其他单选按钮的更改.这有效地使其成为只读而不会禁用它并将其变为灰色.
在Internet Explorer上,如果选中了另一个单选按钮,并且单击该组中的另一个单选按钮,则在单击事件触发您单击的单击事件之前,已选中的单选按钮将清除.但是,由于click事件上的"return false",您单击的那个没有被选中.
根据MSDN,onbeforeupdate事件在click事件触发之前触发控件组中的所有控件,我认为这是另一个单选按钮被清除的地方.但是如果您尝试上面的代码,则onbeforeupdate事件中不会显示任何警报- 您只需获得点击事件警报.显然,事件永远不会被解雇或没有办法陷阱.
是否有任何可以阻止的事件可以阻止组中的其他单选按钮清除?
请注意,这是一个简化的示例,我们实际上使用jQuery来设置事件处理程序并处理它.
更新:
如果将此事件添加到其中一个单选按钮:
onmousedown="alert('omd'); return false;"
Run Code Online (Sandbox Code Playgroud)
弹出警报框,关闭它,并且点击事件永远不会触发.所以我们认为我们已经弄明白了,但不,它可能不那么容易.如果您删除警报并将其更改为:
onmousedown="return false;"
Run Code Online (Sandbox Code Playgroud)
它不起作用.另一个单选按钮清除,单击按钮上的单击事件将触发.onbeforeupdate仍然永远不会开火.
我们认为这可能是时间安排(即使它很少是真的,但它总是一个理论),所以我尝试了这个:
onmousedown="for (i=0; i<100000; i++) {;}; return false;"
Run Code Online (Sandbox Code Playgroud)
单击,暂停一段时间,然后另一个单选按钮清除,然后单击事件触发.Aaargh!
更新:
Internet Explorer糟透了.除非有人想出一个好主意,否则我们会放弃这种方法并使用复选框jQuery扩展,它可以实现我们想要的功能,但会给页面带来更大的客户端脚本负担,并且需要更多的HTML重新编码,因为ASP.Net服务器控件呈现和母版页名称修改.