onClientClick return Function()仍然会触发OnClick



在测试数据在javascript中是否有效后,试图阻止我的Button1_Click提交数据。我已经尝试了很多次,但无论我在函数中返回什么,它都会提交。

<form runat="server">
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" OnClientClick="return testValidate();" />
</form>

Button1_Click是一个c#函数,目前只在调用时提醒我-编辑

我的Javascript函数:

function testValidate() { 
return false;
}

我尝试了一些建议的解决方案,例如使用OnClientClick="if(!testValidate(((return
false;">

然而,这些都没有起作用

感谢提前的帮助

很难理解你真正想要的是什么,但如果你不希望在验证失败时提交表单数据,那么你需要将其全部转换为JavaScript并设置ajax调用(这需要删除OnClick事件(,或者在C#代码函数中进行所有验证,然后您可以使用bool来确定是否提交数据。

JavaScript示例:

function testValidate() { 
var is_valid = false;
// Do validation code
if(is_valid) {
$..ajax({
url: //URL location of your webservice,
method: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: //Form data,
success: function (data) {
},
error: function (data, text, error) {
alert(error);
}
});
}
}

web服务方法

[WebMethod]
public void SubmitData(/*Lay out all parameters here*/) 
{
//Insert form data
}

在OnClick中完成所有操作。(需要删除OnClientClick,因为它将不再需要(

正面:

<form runat="server">
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
</form>

C#:

protected void Button1_Click(object sender, EventArgs e) 
{
bool isValid = false;
// Do validation
if(isValid)
{
// submit form data
}
}

如果我误解了你的要求,我提前道歉。如果我现在给出的答案不符合你的需求,我愿意修改我的答案。如果这不是你想要的,请澄清你的问题。谢谢

编辑:

这就是为什么OnClientClick="return false;"OnClientClick="return testValidate();"不同。

JS在看到返回语句的那一刻就会返回,无论代码是否执行完毕。因此,return testValidate();执行函数调用并立即返回,而不给testValidate()完成运行的机会,因为return false;立即返回false。

为了避免立即返回,请尝试使用OnClientClick="var test = testValidate(); setTimeout(function() { return test; }, 10);"。或者,您可以在超时时间限制(本例中为10(内放入任何以毫秒为单位的时间,以允许只有在函数完成并且测试有值时才会返回。或者,您可以只执行OnClientClick="testValidate();",它将在调用testValidate((后将其求值为布尔值,这将允许调用函数中的return false;并返回false。我希望这更有意义。

而不是

OnClientClick="return testValidate();"

只写

OnClientClick="testValidate();"

最新更新