2017-02-23 124 views
1

Я видел, что это возможно поместить код jquery в атрибут href тега html a.Странное поведение кода jQuery в атрибуте href

Этот код, однако, работает, поэтому я не понимаю: он работает после второго щелчка. Почему?

<a href="javascript:alert('ok JavaScript')">JS</a> 
 
<br> 
 
<script src="https://code.jquery.com/jquery-latest.min.js"></script> 
 
<a id="myId" href='javascript: 
 
    $(document).ready(function(){ 
 
    $("#myId").click(function() { 
 
     alert("ok jQuery"); 
 
    }); 
 
    });'>jQ</a>

+3

Хотя можно добавить JS-код в 'href', вы * действительно, действительно * не должны –

+0

@Rory, мне нужен букмарклет, который будет использовать только меня ... –

+0

Функция готовности документа называется один раз, когда dom готова выполнить js-коды. В вашем коде вы нажимаете и выполняете свой javascript вручную, поэтому сначала он вызывает функцию готовности к документу, ожидая вызова функции myId. –

ответ

1

Ничего странного в этом поведении.
Нет обработчиков jQuery click, привязанных к вашей ссылке в начале.

Однако при нажатии на нее в первый раз, он выполняет следующий скрипт из его href:

$(document).ready(function() { 
    $("#myId").click(function() { 
    alert("ok jQuery"); 
    }); 
}); 

и связывает обработчик к вашей ссылке. Итак, после первого щелчка у вас нет alert, но теперь у вас есть click обработчик, связанный с вашим #myId.

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

1

Первый клик определяет событие щелчка, чтобы отобразить окно предупреждения.

Второй клик выполняет код и показывает окно предупреждения.

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

2

В первом щелчке активируется функция в атрибуте href, и обработчик привязывается к элементу привязки 'myId'. Во втором обработчике кликов выполняется выполнение, и он показывает предупреждение.