Подтвердить что ты не робот

Остановить onclick при стрельбе, когда onclientclick является ложным?

Можно ли использовать свойство onclientclick кнопки для выполнения проверки клиентов. Если проверка возвращает true, тогда запустите событие onclick. Если проверка clientside возвращает false, не запускайте событие onclick.

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

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();"

Он представляет форму оба раза.

Почему это?

4b9b3361

Ответ 1

Вы хотите добавить 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>

Ответ 2

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

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

Ответ 3

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

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

}

ИЛИ

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

}

Ответ 4

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

Однако это не всегда возможно. Таким образом, простой вывод заключается только в том, чтобы наследовать LinkButton и добавить переменную типа AutoPostBack. if 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, но в этом случае я думаю, что мы хороши;

Ответ 5

На странице сервера создайте кнопку:

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 ;
}