我的asp.net页面中有以下代码:
<button dojotype="dijit.form.Button">
<asp:Label ID="lblClear" runat="server" meta:resourcekey="lblClearResource1" />
<script type="dojo/method" event="onClick" args="evt">
return ClearCheckBoxes('<%=clientIds.ClientID%>');
</script>
</button>
ClearCheckBoxes如下:
function ClearCheckBoxes(obj1) {
var chks = document.getElementsByTagName("input");
for (i = 0; i < chks.length; i++) {
if (chks[i].type == "checkbox") {
if (chks[i].checked == true) chks[i].checked = false;
}
}
document.getElementById(obj1).value = "";
document.getElementById('<%=clientsIds.ClientID %>').value = "";
return false;
}
此代码适用于所有浏览器,IE8除外,它会导致回发。在这种情况下,有没有办法在IE8中禁用回发?我在网上找到的所有东西都说是假的;应该工作,但这不会阻止回发。
答案 0 :(得分:1)
通常,按钮的默认type
为submit
,如果存在,则最终会提交周围的表单。如果此按钮无意提交表单,则将type="button"
添加到<button>
代码会阻止其显示为提交按钮。
简化示例:(尝试删除type="button"
以查看IE8中的差异)
<form>
<button type="button" data-dojo-type="dijit/form/Button">Button
<script type="dojo/method" event="onClick" args="evt">
this.set('label', 'Clicked');
</script>
</button>
</form>
答案 1 :(得分:0)
看看dojo/_base/event#stop
; here's the documentation,强调我的:
阻止传播,阻止传递事件的默认操作
您可以在代码中包含该内容。
require(['dojo/_base/event']);
<button dojotype="dijit.form.Button">
<asp:Label ID="lblClear" runat="server" meta:resourcekey="lblClearResource1" />
<script type="dojo/method" event="onClick" args="evt">
dojo.stopEvent(evt); // dojo/_base/event extends dojo pre-2.0
return ClearCheckBoxes('<%=clientIds.ClientID%>');
</script>
</button>
dojo/_base/event#stop
跨浏览器工作,包括(我相信)在IE8中。
如果模板的require
模块不可行(我自己从未做过类似的事情),这里是防止IE中默认行为的特定代码:
evt = evt || window.event;
evt.cancelBubble = true;
on._preventDefault.call(evt);