【问题标题】:Having issues getting JavaScript onClientClick event working in IE10在 IE10 中获取 JavaScript onClientClick 事件时遇到问题
【发布时间】:2017-01-03 08:14:00
【问题描述】:

我对编码还是很陌生,而且我的 JavaScripting 几乎不存在。我已经尝试寻找另一个答案,但我不确定我在寻找什么/在寻找什么,所以如果这是重复的,我们深表歉意。总之……

我有一个 asp.net c# 页面,该页面将一系列数据从数据库拉入 GridView。我想为页面用户提供的选项之一是能够删除行,作为其中的一部分,我在页面中包含了一些 JavaScript,以提示他们仔细检查是否要继续删除。我的问题是,虽然该脚本在 Chrome 中运行良好,但在 IE10 中不起作用(可能是因为 Chrome 更宽容)。谁能告诉我哪里出错了?

我的 JavaScript 函数是:

<script type="text/javascript">
    function confirmDelete(id) {
        try {
            console.log('trying');
            if (confirm('Do you really want to delete this entry?')) {
                $('#' + id).html('Processing... <i class="fa fa-spinner fa-spin"></i>').attr('disabled', 'disabled').addClass('disabled');
                return true;
            }
            $('#' + id).html('<span class="btn btn-small btn-spinner">Delete</span>').removeClass('disabled').removeAttr('disabled');
        } catch (e) { console.log(e.message);}
        return false;

    }
</script>

并且它链接到以下 GridView:

<asp:UpdatePanel ID="upCurrentServicesGrid" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:GridView ID="grdviewCurrentSystems" CssClass="table-data" UseAccessibleHeader="true" AutoGenerateColumns="false" runat="server">
            <Columns>
                <asp:BoundField DataField="systemName" HeaderText="System" ItemStyle-Width="10%"/>
                <asp:TemplateField HeaderText="Status" ItemStyle-Width="46%">
                    <ItemTemplate>
                            <div style="display:none">
                            <asp:TextBox ID="RowId" runat="server" Text='<%# Eval("id") %>' />
                            </div>
                            <div style="display:none">
                                <asp:TextBox ID="SelectedVal" runat="server" Text='<%# Eval("systemStatus") %>' />
                            </div>
                            <pfp:DropDownList ID="pfpdropSystemStatus"  CausesValidation="false" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Further information" ItemStyle-Width="50%">
                    <ItemTemplate>
                        <div>
                            <pfp:TextBox ID="pfptxtSystemStatusInfo" TextMode="MultiLine" MaxLength="300" CssClass="textarea1" runat="server" Text='<%# Eval("systemInformation") %>' />
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Delete" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
                    <ItemTemplate>
                        <div>
                            <asp:LinkButton ID="lnkbtnDelSystem" CausesValidation="false" OnClick="lnkbtnDelSystem_Click" OnClientClick="return confirmDelete(this.id); return false;" CommandArgument='<%# Eval("id") %>' runat="server">
                                <span class="btn btn-small btn-spinner">Delete</span> 
                            </asp:LinkButton>
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

让我伤心的是最后一行(链接按钮) - 就像我说的,它在 Chrome 中完美运行,但它只是挂在 IE10 中(尽管我检查了控制台,我知道它已经走了这么远,因为它读作“尝试”)。

有什么建议吗?

谢谢:)

【问题讨论】:

  • 你需要显示生成的html。您的 JS 在客户端执行,因此您需要显示客户端看到的内容,而不是服务器上存在的内容。
  • 如果在回发之前禁用 IE 中的按钮,回发将不会发生。在回发启动后,您必须执行 settimeout 或其他操作来禁用该按钮。
  • 感谢您的回复,伙计们。 ps2goat,我不确定你的意思 - 我在哪里设置超时?
  • if (confirm...) 块内。不要添加 disabled 属性,而是使用 setTimeout( function(){$('#' + id).attr('disabled', 'disabled')}, 0);
  • 感谢 ps2goat - 你真是个天才!像魅力一样工作:)

标签: javascript c# asp.net internet-explorer-10


【解决方案1】:

如果在回发之前禁用 IE 中的按钮,回发将不会发生。您必须在回发启动后执行settimeout 或其他操作来禁用该按钮。

例子:

function confirmDelete(id) {
        try {
            console.log('trying');
            if (confirm('Do you really want to delete this entry?')) {
                $('#' + id).html('Processing... <i class="fa fa-spinner fa-spin"></i>').addClass('disabled');
                // new code here
                setTimeout( function(){
                    $('#' + id).attr('disabled', 'disabled');
                }, 0);
                return true;
            }
            $('#' + id).html('<span class="btn btn-small btn-spinner">Delete</span>').removeClass('disabled').removeAttr('disabled');
        } catch (e) { console.log(e.message);}
        return false;

    }

【讨论】:

  • 嗨@ps2goat - 当我之前发表评论时,我没有将新代码添加到现有代码中,而是替换了它 - 换句话说:try{console.log('trying') ; if(confirm('你真的要删除这个条目')){ setTimeout(function(){$('#' + id).attr('disabled', 'disabled')}, 0);返回真; ---- 这似乎适用于 IE 和 Chrome,而如果我也保留原始代码 - (if.​​... $('#' + id).html(('Processing.... ').attr('disabled', 'disabled').addClass('disabled'); ) - 它在 IE 上不起作用。
  • @chesh78- 这是意料之中的。这就是为什么您必须将attr('disabled', 'disabled') 部分移动到setTimeout 调用中的原因。这允许按钮启动回发,然后禁用对setTimeout 的调用中的按钮。我的代码示例没有添加 disabled 属性的原始调用。
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-15
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
相关资源
最近更新 更多