ASP.NET OnClientClick = "return false;"не работает - PullRequest
10 голосов
/ 09 октября 2010

Я просто хочу добавить некоторую проверку на стороне клиента (JQuery Javascript) в пользовательский веб-элемент управления.Я помещаю обработчик OnClientClick, и функция вызывается.НО, даже если я возвращаю «false», метод OnClick всегда срабатывает.Что я делаю не так?

Я с VS 2010, ориентируясь на фреймворк 4.0 с JQuery 1.4.2.и JQuery UI 1.8.4.

Вот пример кода:

<td style="text-align:right"><asp:Button ID="btnAddSave" OnClientClick="return ValidateMail();" OnClick="btnAddSave_Click" runat="server" Text="Submit" /></td>

Метод сценария:

function ValidateMail() {
alert("Bouton clicked");
return false;

}

Если я поставлюТочка останова в событии Page_Load, я вижу, что я вхожу, и также выполняется событие btnAddSave_Click.

Ответы [ 6 ]

11 голосов
/ 05 сентября 2012

по некоторым причинам, хотя у меня не было прикрепленных обработчиков событий jquery, это не сработало

То, что действительно работало, было:

OnClientClick="if (validate_form() == false) return(false);"
6 голосов
/ 25 июля 2011

У вас есть обработчик события щелчка (зарегистрированный через jquery), который возвращает true?В этом случае возвращаемое значение OnClientClick игнорируется.

Посмотрите на мой вопрос (и ответ): Почему возврат false из OnClientClick не отменяет обратную передачу

3 голосов
/ 11 апреля 2013

Отличные ответы. Я делаю это так. Тот же результат - событие OnClick не срабатывает, если из функции Java возвращается false.

OnClientClick = "if (!ValidateDelete()) return false;"
OnClick="btnDeleteSupplier_Click"
3 голосов
/ 17 июня 2011

Попробуйте изменить его на

OnClientClick="ValidateMail(); return false;" 
0 голосов
/ 06 апреля 2017

Просто добавьте javascript:

Пример:

javascript:return ValidateMail();
0 голосов
/ 05 апреля 2017

Я пишу этот ответ только потому, что использую HTML-кнопки с ASP.NET WebForms и не могу найти решение, почему я должен заменить свой кусок кода на рабочие примеры. Вот решение, почему оно не работает. Надеюсь, это поможет вам понять проблему, как проверка мне помогла. Это мой первый пост, извините за стиль.

<button type="button" id="buttonAddOrEdit" class="btn btn-success"  runat="server" onclick="return myValidate()"    onserverclick="buttonAddOrEdit_ServerClick">Zapisz</button>

И функция JavaScript:

function myValidation() {
        if (validator.form()) {
           //Project logic
            return true;
        }
        else return false;
    };

Использование клика на стороне клиента после правильной проверки не вызывало событие на стороне сервера, которое было привязано к кнопке. Упомянутое решение изменить код на:

onclick = "if (! MyValidation ()) return;"

Работает из-за способа создания HTML, отображаемого на странице с помощью onserverclick. Onserverclick на кнопку HTML заменяется методом __doPostBack из JavaScript. Полный код HTML-кнопки, отображаемой на стороне клиента, выглядит следующим образом:

<button onclick="return myValidation(); __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button>  Błąd składni

И после его замены на if if.

<button onclick="if(!myValidation()) return; __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button>

Работа с return myValidate (); не будет запускать событие, потому что оно возвращается до __doPostBack.

Следующий код позволит вам добавить другой код к кнопке, если это необходимо, и не вызовет никаких проблем.

...