是否可以使用按钮的onclientclick
属性进行客户端检查。如果检查返回true
,则触发onclick
事件。如果客户端检查返回false
,请不要触发onclick
事件。
这可能吗?
更新
这两项工作:
Stops the form from submitting:
OnClientClick="return false;"
Allows the form to submit:
OnClientClick="return true;"
接下来的2个不起作用:
// in js script tag
function mycheck() {
return false;
}
// in asp:button tag
OnClientClick="return mycheck();"
// in js script tag
function mycheck() {
return true;
}
// in asp:button tag
OnClientClick="return mycheck();"
它提交表格两次。
为什么?
答案 0 :(得分:42)
您希望在调用函数后在OnClientClick中添加return
。否则,即使函数返回false,该按钮也会回发。
<asp:button ID="Button1" runat="server" OnClick="Button1_Click"
OnClientClick="return checkValidation()" Text="Submit" />
<script type="text/javascript">
function checkValidation() {
return confirm('Everything ok?');
}
</script>
答案 1 :(得分:7)
不确定。如果您在return false
中使用OnClientClick
,则会阻止任何导航。所以你的代码看起来像是:
<asp:LinkButton runat="server" OnClientClick="if(!ValidatePage()) { return false;}" />
答案 2 :(得分:2)
是的,你可以,在onclientClick函数调用中使用preventDefault()
function onclientClickFun(e)
{
if(!IsValidationSuccess)
{
e.preventDefault();
}
}
或强>
function onclientClickFun(e)
{
if(!IsValidationSuccess)
{
return false;
}
}
答案 3 :(得分:1)
我也遇到过这个问题。不喜欢在每个linkbutton上放置OnClientClick = return false。使用简单的页面,它更容易使用锚点,并避免asp为您填充href。
然而,这并不总是可行的。所以一个简单的结论就是继承LinkButton并添加一个像AutoPostBack这样的变量。 if false然后用html覆盖输出或添加OnClientClick in。我真的不喜欢内联标签。
namespace My.WebControls {
[ToolboxData("<{0}:LinkButton runat=server ID=btn></{0}:LinkButton>"), ParseChildren(true), ToolboxItem(true)]
public class LinkButton : System.Web.UI.WebControls.LinkButton {
private bool _postback = true;
[Bindable(true), Category("Behavior"), DefaultValue(true), Description("Gets or Sets the postback click behavior")]
public bool AutoPostBack { get { return _postback; } set { _postback = value; } }
protected override void Render(System.Web.UI.HtmlTextWriter writer) {
if(!AutoPostBack){
this.OnClientClick = "return false";
}
base.Render(writer);
}
}
}
许多属性应该在ViewState中处理,但在这种情况下我认为我们很好;
答案 4 :(得分:1)
在服务器页面中创建按钮:
var button1 = new Button();
button1.ServerClick += new EventHandler(button1_ServerClick);
button1.OnClientClick = SetJsForSaveBtn();
button1.Attributes.Add("UseSubmitBehavior", "false");
panel.Controls.Add(button1 );
//包含服务器代码
private void saveBtn_ServerClick(object sender, EventArgs e)
{
//do something if ClientClick returns true
}
//包含页面的JS代码
LiteralControl js = new LiteralControl();
panel.Controls.Add(js);
js.Text =@"<script type='text/javascript'>
$(document).ready(function(){
function CheckValidationOnClient(){
if(!ValidatePage()){
return false;
}
else{
return true;
}
};
});
</script> ";
private string SetJsForSaveBtn()
{
var jsfunc = @" return CheckValidationOnClient()";
return jsfunc ;
}