Javascript 防止在ie8中对dojo按钮进行回发单击

Javascript 防止在ie8中对dojo按钮进行回发单击,javascript,asp.net,dojo,Javascript,Asp.net,Dojo,我的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 ClearChec

我的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>

返回清除复选框(“”);
其中ClearCheckBox如下所示:

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;
}
功能清除复选框(obj1){
var chks=document.getElementsByTagName(“输入”);
对于(i=0;i

此代码在所有浏览器中都能正常工作,IE8除外,因为IE8会导致回发。在这种情况下,有没有办法禁用IE8中的回发?我在网上找到的所有东西都是假的;应该可以工作,但这不会阻止回发。

查看
dojo/_base/event#stop
,重点地雷:

防止传播并关闭已传递事件的默认操作

您可以将其包含在代码中

require(['dojo/_base/event']);


通常,按钮的默认
类型
submit
,如果存在表单,则最终会提交周围的表单。如果此按钮不打算提交表单,则将
type=“button”
添加到
标记将阻止其像提交按钮一样工作

简化示例:(尝试删除
type=“button”
以查看IE8中的差异)


按钮
此.set('label','Clicked');

event.stop
只需对事件调用
preventDefault()
stopPropagation()
。如有必要,您最好呼叫其中一个或另一个(或两者)。在这种情况下,仅使用
preventDefault
就足够了,不过我也怀疑将按钮的类型设置为
button
可以完全避免问题的发生;上面提供了
事件停止
的IE特定部分的代码。然而,在这个特定的例子中,仅仅调用这两个函数可能都能起作用。我给出的方法是dojo方法,这就是我认为这个问题的目的。dojo为旧IE规范化事件“
stopPropagation
preventDefaults
,这样当您自己调用这些函数时,这种逻辑就已经发生了(例如)
dojo/_base/event
将不再是dojo 2.0中的东西,调用
preventDefault
和/或
stopPropagation
将是防止默认行为或停止事件冒泡的方法,不管dojo与否。
<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>
evt = evt || window.event;
evt.cancelBubble = true;
on._preventDefault.call(evt);
<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>