在dojo按钮单击上阻止ie8中的回发

时间:2013-10-23 20:59:42

标签: 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 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中禁用回发?我在网上找到的所有东西都说是假的;应该工作,但这不会阻止回发。

2 个答案:

答案 0 :(得分:1)

通常,按钮的默认typesubmit,如果存在,则最终会提交周围的表单。如果此按钮无意提交表单,则将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);