2015-05-05 57 views
0

ASP.NET 4.0由于网络延迟允许用户多次击中表单提交按钮,导致重复的条目,我试图使用Javascript来禁用按钮在第一次点击后直到回传。我不知道Javascript,所以我为我的无知道歉。 问题按钮是在一个页面中的一个tabcontrol内的一个窗体内的几个窗体等,所以我使用一个验证组,包含不同的验证程序关闭或打开取决于下拉选择。asp.net验证组成功后禁用JavaScript提交按钮

这里是我的按钮:

<asp:Button ID="BtnAddProd" runat="server" OnClick="BtnAddProd_Click" 
Text="Add Status" ValidationGroup="Activity_ValControls" 
onclientclick="disableBtnOnClick(this,'Activity_ValControls')" 
CausesValidation="False" /> 

这里是我的javascript:

function disableBtnOnClick(btnName, valGroup) { 
    var isGroupValid = Page_ClientValidate(valGroup); 

//check if validation group is successful 
if (isGroupValid) { 
    //set button to disabled so you can't click on it.  
    btnName.disabled = true; 
    btnName.value = 'Please wait...' 
} 
    else { 
     alert('Page is not valid');//for testing 
    } 
} 

我已经去了许多不同的道路,这是我已经得到最接近的一次。它适用于一种情况 - 只有在第一次点击导致验证错误时,我才能纠正错误并提交。如果没有错误,或者是由于我的下拉选择没有关联的验证器(即他们想添加一条自由文本评论记录),或者如果我第一次正确输入所有验证字段,那么它会非常快速地闪烁以禁用'请稍候...'文本然后回到启用和默认文本。如果我很快点击它很多次,它最终会禁用“Please wait ...”文本并停留在那里。

任何想法?

+0

Try OnClientClick =“this.disabled = true; return true;” http://encosia.com/disable-a-button-control-during-postback/ –

+0

谢谢你的链接。它促使我将UseSubmitBehavior =“False”添加到我的按钮中,从而实现了这一点。 – Dayna

回答

0

谢谢你的回复。上面评论中的链接促使我将UseSubmitBehavior =“False”添加到我的按钮,这就是我所需要的。

0

原谅我,如果我误解了这个问题。我会直接用javascript提交按钮。我有一个类似的问题,我必须在发布到服务器之前用JS处理站点。这段代码使用JQuery。

http://jsfiddle.net/sckyq7ta/4/

$("[type='submit']").click(function (event, args) { 
if (!args) { 
    event.preventDefault(); 

    //Do your thing 
    $(this).attr("disabled", "true"); 
    $(this).html("Please wait.."); 

    //call myself with args to enable default (posting to server) 
    $(this).trigger("click", { 
     enableDefault: true 
    }); 
} 
});