[英]Prevent postback in ie8 on dojo button click
我的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中的回发? 我在网上找到的所有内容都返回false; 应该可以,但是不会阻止回发。
通常,按钮的默认type
是submit
,如果存在,它将最终提交周围的表单。 如果此按钮不打算提交表单,则在<button>
标记中添加type="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>
看一下dojo/_base/event#stop
; 这是文档 ,重点是我的:
防止传播并破坏已传递事件的默认操作
您可以将其包含在您的代码中。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.