2013-10-02 3 views
21

Возможно ли использовать функцию onclientclick кнопки для проверки клиентов. Если проверка вернет true, тогда запустите событие onclick. Если проверка клиента возвращает false, не запускайте событие onclick.Остановка onclick при стрельбе, когда onclientclick является ложным?

Возможно ли это?

UPDATE:

Эти 2 работы:

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

Пожалуйста см. обновление до вопроса с тем, что я пробовал. – oshirowanen

ответ

36

Вы хотите добавить return внутри OnClientClick после функция вызывается. В противном случае кнопка будет отсылаться обратно, даже если функция возвращает 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> 
+0

Пожалуйста, ознакомьтесь с вопросом о том, что я попробовал. – oshirowanen

+0

Ваш обновленный код работает. Вы можете протестировать его, создав новую aspx (без главной страницы). Это может быть связано с вашим существующим кодом javascript, мешающим функции mycheck. – Win

+0

Спасибо человеку .. Вы спасли мое время .. –

1

Да, вы можете, в OnClientClick использования вызова функции preventDefault()

function onclientClickFun(e) 
{ 
    if(!IsValidationSuccess) 
{ 
    e.preventDefault(); 
} 

} 

ИЛИ

function onclientClickFun(e) 
{ 
    if(!IsValidationSuccess) 
{ 
    return false; 
} 

} 
+0

Пожалуйста, ознакомьтесь с вопросом о том, что я попробовал. – oshirowanen

7

Конечно. Если вы используете return false в своем OnClientClick, это предотвратит любую навигацию. Таким образом, вы код будет выглядеть следующим образом:

<asp:LinkButton runat="server" OnClientClick="if(!ValidatePage()) { return false;}" /> 
+0

Пожалуйста, ознакомьтесь с вопросом обновления с тем, что я пробовал. – oshirowanen

+0

@oshirowanen Я честно не помню точно, почему вы явно объясняете, почему вы должны положить 'return false' в' OnClientClick'. Если я помню, это связано с инкапсуляцией ASP.NET вокруг вашего кода в «OnClientClick», когда он отображает фактический HTML и Javascript. –

1

Я столкнулся с этой проблемой. Не хотелось бы, чтобы OnClientClick = return false на каждой ссылке. С простой страницей просто проще использовать якорь и избегать asp заполнения href внутри для вас.

Однако это не всегда возможно. Таким образом, простой вывод заключается только в том, чтобы наследовать LinkButton и добавить переменную типа AutoPostBack. если false, то просто переопределите вывод с помощью html или добавьте OnClientClick. Мне не нравятся встроенные теги.

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, но в этом случае я думаю, что мы хороши;

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 [email protected]"<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 ; 
} 
Смежные вопросы