2014-02-13 6 views
0

Я пытаюсь вызвать событие click по ссылке из обработчика кликов для той же ссылки. Я хочу остановить ссылку от навигации до тех пор, пока пользователь не получит уведомление о каком-либо действии. Как только действие будет завершено, ссылка должна перемещаться как обычно.Trigger click from from click handler

См. Ниже приведенный ниже пример.

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <script language="javascript" type="text/javascript"> 
      $(function() { 
       $("#test").click(function (e) { 
        var lnk = $(this); 

        if (lnk.data("checked") != true) { 

         var notice = $('<a href="#">Continue</a>'); 
         $('body').append(notice); 

         notice.click(function (e) { 
          lnk.data("checked", true); 
          lnk.click(); 

          return false; 
         }); 

         return false; 
        } 

        alert("should navigate now"); 
       }); 
      }); 
     </script> 

     <a id="test" href="http://www.google.com">Test</a> 

    </body> 
</html> 

Ожидаемое поведение для этого примера:

  • Тест щелкнул
  • Продолжить появляется
  • Продолжить щелкнул
  • Страница переходит к HREF из 'Test'

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

+1

ручной запуск события щелчка не может вызвать поведение по умолчанию элемента –

+0

Проверка типа 'lnk.data («проверено»)', он может считаться не 'falsy' –

+0

@ArunPJohny у вас есть ссылка на это? – Alex

ответ

1

Try вызывая щелчок, используя DOM элемент

notice.click(function (e) { 
     lnk.data("checked", true); 
     lnk[0].click(); 
     // ^^^^ 
     return false; 
    }); 

DEMO

+0

Это работает. Ты знаешь почему? Предположительно, jquery вмешивается, есть ли у него какая-то «потенциальная бесконечная петля»? – Alex

+0

@Alex Я не совсем уверен, почему jQuery не разрешает поведение ссылки по умолчанию, но я думаю, что это предназначено. – Anton

+0

@Alex нашел информацию здесь http://stackoverflow.com/a/5867423/1696560 'Вы можете вызвать только щелчок, созданный jQuery. Это один из милых маленьких приколов jQuery. « – Anton

0

Просто добавьте document.location.href = lnk.attr('href'); после предупреждения.

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

0

Не уверен, что это то, что вы хотите, но попробуйте переписать код так:

$(function() { 
    $("#test").click(function (e) { 
     e.preventDefault(); 
     if ($(this).data("checked") != true) { 
      var notice = $('<a class="link" href="#">Continue</a>'); 
      $('body').append(notice); 
     } 
     alert("should navigate now"); 
    }); 

    $(document).on('click', '.link', function (e) { 
     $("#test").data("checked", true); 
     window.location = $("#test").attr('href'); 
    }); 
}); 
0

Я знаю, что это старый, но я хочу внести вклад в тех, кто найдет этот вопрос и ответы с этого момента.

Если вы пытаетесь подтвердить, хочет ли пользователь покинуть сайт, тогда рассмотрите обработчик события window.onbeforeunload. Вы можете ввести строковое сообщение, которое будет представлено пользователю в виде сообщения с предупреждением.

<script> 
window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE and Firefox prior to version 4 
    if (e) { 
     e.returnValue = 'Sure?'; 
    } 

    // For Safari 
    return 'Sure?'; 
}; 
</script> 

Проверьте первый ответ здесь: Confirmation before closing of tab/browser