onclick= "return confirm (" ) " работа с $('.класс").нажмите (функция () {});

у меня есть эта функция, которая отключает ввод после нажатия пользователем:

$('.click-off').click(function () {
    var btn = this;
    setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
    return true;
});

и у меня есть этот вход с подтверждением javascript:

<input type="submit" class="click-off" onclick="return confirm('Are you sure?');" value="Delete">

даже если я нажму "отмена" в поле подтверждения, $('.click-off').вызывается событие click (), и кнопка становится отключенной.

в $('.click-off').click () используется многими входами, поэтому подтверждение не может быть внутри него.

Как я могу проверить подтверждение возврата в $('.click-off').событие click? Или даже предотвратить $('.click-off').нажмите событие для вызова?

4 ответов


почему вы должны иметь эти части логики быть отдельными в первую очередь? Вот 2 метода, чтобы обойти проблему:

объединить логику в один метод:

$('.click-off').click(function () {
    // escape here if the confirm is false;
    if (!confirm('Are you sure?')) return false;
    var btn = this;
    setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
    return true;
});

используйте глобальную переменную (или объект предпочтительно):

var clickOffConfirmed = false;

<input type="submit" class="click-off" onclick="clickOffConfirmed = confirm('Are you sure?');" value="Delete" />


$('.click-off').click(function () {
    // escape here if the confirm is false;
    if (!clickOffConfirmed) return false;
    var btn = this;
    setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
    return true;
});

вы должны избегать закрепления действий как с jquery, так и с onclick, в первую очередь потому, что скоро вы будете полностью потеряны в своем коде.

Так, например, вы можете сделать это:

$('.click-off').click(function () {

   var r=confirm("Are you sure?")
   if (r==true)
   {
       var btn = this;
       setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
       return true;
   }
   else
   {
       //nothing to do here
   }

});

и удалите событие onclick. Так что у вас все будет в одном месте.

в вашем примере вы дважды подключаетесь к событию click, и они оба увольняются, несмотря на результаты друг друга.


попробуйте захватить поле подтверждения, а затем отключить кнопку.

$('.click-off').click(function () {
  var r=confirm("Press a button");
  if (r==true)
  {
    $(this).attr('disabled', 'disabled');
  }
  else
  {

  }
});

также удалите onclick


вы можете иметь лучшее из обоих и сохраняет javascript чистым для кода, а не текста языка.

<a href="#" class="click_confirm" data-click-confirm="Warning...">Click Here</a>

<script type="text/javascript">
//<![CDATA[
(function($){
    $(document).ready(function() {

        $('.click-off').click(function(){

            if($(this).data('click-confirm')){
                var onClickConfirm = window.confirm($(this).data('click-confirm'));
                if(!onClickConfirm){
                    return onClickConfirm;
                }
            }

            // continue code
        });

    });
})(jQuery);
//]]>
</script>