Почему возвращение false из OnClientClick не отменяет обратную передачу - PullRequest
7 голосов
/ 25 июля 2011

У меня есть LinkButton, где я использую свойство OnClientClick, чтобы спросить пользователя, действительно ли он хочет выполнить действие, например:

<script>
function confirmDelete() {
  return confirm('Do you really want to delete?');
}
</script>

<asp:LinkButton runat="server" OnClientClick="return confirmDelete()" ... />

Этот шаблон обычно работает, но на этом конкретномстраница, это не так.Независимо от того, нажимаю ли я «ОК» или «Отмена» в диалоговом окне подтверждения, выполняется обратная передача.


Просто для полноты (чтобы ответить на вопрос PST): с обработанным HTML-кодом все в порядке.Например, это выглядит так:

<a id="ctl00_c1_content_btnDelete" onclick="return confirmDelete();"
 href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(..))"
... >
  Delete
</a>

Ответы [ 2 ]

7 голосов
/ 25 июля 2011

Причиной такого поведения был другой фрагмент javascript, в котором обработчик события нажатия ссылки (кнопки) был зарегистрирован через jquery, например, что-то похожее на это:

<script>
$(document).ready(function() {
  $('a').click(function() {
    // ...
    return (someCondition == true);
  });
});
</script>

Кажется,обработчик клика вызывался после зарегистрированного OnClientClick, и когда этот возвращал true, происходила обратная передача независимо от результата первого обработчика щелчка (диалоговое окно подтверждения).

0 голосов
/ 31 октября 2016

Вот кое-что, что сработало для меня.

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

Javascript

    function confirmDelete(){
    if(something == true){
    return true;
    }
    else{
    return false;
    }
    }
...