0

我的 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;应该可以,但这并不能阻止回发。

4

2 回答 2

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>
于 2013-10-24T03:59:37.010 回答
0

看看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);
于 2013-10-24T00:14:37.300 回答