当onclientclick为false时停止触发onclick?

时间:2013-10-02 14:43:43

标签: asp.net vb.net asp.net-3.5 onclientclick

是否可以使用按钮的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();"

它提交表格两次。

为什么?

5 个答案:

答案 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。

然而,这并不总是可行的。所以一个简单的结论就是继承LinkBut​​ton并添加一个像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 ;
}