单击“提交”按钮,单击javascript呈现asp.net 2.0到4.0之间的差异

单击“提交”按钮,单击javascript呈现asp.net 2.0到4.0之间的差异,javascript,asp.net,button,onclick,Javascript,Asp.net,Button,Onclick,我在ASP.Net web窗体中有以下按钮: <asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" /> 当页面在ASP.NET2.0下运行时,呈现的HTML如下所示: <input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="thi

我在ASP.Net web窗体中有以下按钮:

<asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" />
当页面在ASP.NET2.0下运行时,呈现的HTML如下所示:

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = 'Please wait...';this.disabled = true;__doPostBack('btn_submit','');" id="btn_submit" />
当页面在ASP.Net 4.0下运行时,呈现的HTML如下所示:

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = &#39;Please wait...&#39;;this.disabled = true;__doPostBack(&#39;btn_submit&#39;,&#39;&#39;);" language="javascript" id="btn_submit" />
private sub prevent_multiple_submits()

dim sb as StringBuilder

sb = New StringBuilder()

sb.Append( "this.disabled=true;this.style.backgroundColor='#EFEFEF';this.style.color='#000000';this.value='Please wait...';" )
sb.Append( Page.ClientScript.GetPostBackEventReference( btn_submit, String.Empty ) )

btn_submit.Attributes.Add( "onclick", sb.ToString() )

end sub
。。。由于某种原因,该按钮从未显示为禁用。。。就像在ASP.NET2.0下一样

private sub prevent_multiple_submits()

dim sb as StringBuilder

sb = New StringBuilder()

sb.Append( "this.value = 'Please wait...';this.disabled = true;" )
sb.Append( Page.ClientScript.GetPostBackEventReference( btn_submit, String.Empty ) )

btn_submit.Attributes.Add( "onclick", sb.ToString() )

end sub
表单仍然提交,一切正常-但按钮在点击后从未显示为禁用状态

还有其他人处理过这种行为吗。。如果是这样的话,您是否找到了一个解决方案,而不必修改web.config、使用JQuery等

顺便说一句

我确实找到了以下参考资料;但在ASP.NET4.0下,还没有任何东西对我有效

我想问题应该是,如何向asp.net按钮添加未替换的javascript代码


提前感谢

您可以通过完全删除“防止多个提交”子按钮并在按钮中添加onClientClick属性来避免此问题:

<asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" onClientClick="this.value = 'Please wait...';this.disabled = true;" />
另一个隐藏按钮而不是禁用按钮的jQuery解决方案:

$(document).ready(function() {
    $('form').submit(function() {
        var btn = $('input[id^="btn_submit_"]');
        btn.after('<span>Please wait...</span>');
        btn.hide();
    });
});
当然,这两种jQuery解决方案都可以在vanilla js中使用,但语法更为详细,您必须查找它。

好的

我觉得有点傻,因为经过一点实验后,虽然ASP.NET4.0的渲染方式与ASP.NET2.0不同,但代码实际上仍然在工作。也就是说,这个按钮被禁用了,只是从来没有这样出现过

问题是,当通过javascript禁用按钮时,没有任何视觉线索表明它正在发生,即:按钮不像以前的版本那样显示为灰色。为了确认这一点,我将prevent_multiple_submits子例程更改如下:

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = &#39;Please wait...&#39;;this.disabled = true;__doPostBack(&#39;btn_submit&#39;,&#39;&#39;);" language="javascript" id="btn_submit" />
private sub prevent_multiple_submits()

dim sb as StringBuilder

sb = New StringBuilder()

sb.Append( "this.disabled=true;this.style.backgroundColor='#EFEFEF';this.style.color='#000000';this.value='Please wait...';" )
sb.Append( Page.ClientScript.GetPostBackEventReference( btn_submit, String.Empty ) )

btn_submit.Attributes.Add( "onclick", sb.ToString() )

end sub
现在-当点击按钮时,按钮变为灰色,表示它已被禁用-这在ASP.NET2.0下通常会自动发生。如果不更改颜色,按钮将永远不会显示为禁用状态,即使它是禁用的,这就是2.0和4.0渲染之间的区别

希望这对其他人有帮助


再次感谢。

嗨,杰森-感谢您抽出时间回答。我使用上面的onClientClick代码尝试了一个测试-不幸的是,它不起作用-问题是submit按钮被禁用,进程表单从未执行。我更喜欢只使用ASP.Net的解决方案,而不必求助于JQueryHas。使用ASP.NET4.0的人都这么做了吗???甚至不使用JQuery也可以吗?@user1377587我给出的前两个解决方案不使用JQuery。这是另一个问题,禁用按钮会导致表单不提交。经过一点研究,我不确定你的解决方案在过去是如何工作的,也许这是2.0和4.0之间的另一个区别。您可以隐藏该按钮,并添加一个带有文本“请稍候”的span。我已编辑添加该解决方案。确认-我只是希望有一个纯ASP.Net解决方案-再次感谢!你认为纯ASP.NET的解决方案是什么?因为即使您最初的2.0代码也使用javascript。