Почему jQuery click-событие срабатывает при загрузке страницы? - PullRequest
3 голосов
/ 13 октября 2009

У меня есть следующий код .... Когда страница загружена, вызывается myFunc (), даже если я не щелкаю в своем div. Зачем? Функция, объявленная как «встроенная», не срабатывает ... хмммм ........

<div id="map" style="background: green; height: 100px"></div>

<script type="text/javascript">
    function myFunc() {
        alert("allways triggered when page loads...");
    };

    $(document).ready(function() {

    $("#map").click(myFunc());
    $("#map").click(function() { alert("not triggered") });

    });
</script>

Ответы [ 7 ]

10 голосов
/ 13 октября 2009

Из-за вашего кода:

 $("#map").click(myFunc());

неверно и должно быть:

$("#map").click(myFunc);

Ваш код сначала вызовет myFunc (), а затем имитирует событие onclick.

Как видно из документации:

Что вы сделали, это: (поскольку myFunc возвращает ноль)

click ()

Инициирует событие щелчка для каждого соответствующего элемента. Вызывает выполнение всех функций, связанных с этим событием click. Чтобы вызвать событие нажатия на все абзацы на странице: . $ ( "Р") нажмите кнопку ();

То, что вы хотите, это:

click (fn) Связывает функцию с событием щелчка каждого соответствующего элемента. Событие click срабатывает при нажатии кнопки указательного устройства над элементом. Щелчок определяется как mousedown и mouseup в том же месте экрана. Последовательность этих событий:

3 голосов
/ 13 октября 2009

С myFunc() в $("#map").click(myFunc()) вы вызываете ссылки на функции с помощью myFunc, и только ее возвращаемое значение передается $("#map").click. Если вы хотите передать саму функцию myFunc, оставьте скобки и используйте только имя функции:

$("#map").click(myFunc);
1 голос
/ 13 октября 2009

Вы вызываете свою функцию в вашем обработчике событий щелчка. Сделайте это вместо:

<script type="text/javascript">
    function myFunc() {
        alert("allways triggered when page loads...");
    };

    $(document).ready(function() {

    $("#map").click(myFunc);
    $("#map").click(function() { alert("not triggered") });

    });
</script>

Вы передаете только имя функции, без скобок , когда передаете его в качестве аргумента обработчику событий (или любой другой функции).

1 голос
/ 13 октября 2009

Должно быть

$("#map").click(myFunc);

Таким образом, вы задаете функцию в качестве параметра. $("#map").click(myFunc()); запустил функцию и выдал результат в качестве параметра.

0 голосов
/ 13 октября 2009

Что ожидается от вашего кода, потому что здесь:

$("#map").click(myFunc());

Скобки () после функции будут вызывать ее.

Попробуйте вместо этого:

<script type="text/javascript">
    var myFunc = function() {
        alert("allways triggered when page loads...");
    };

    $(document).ready(function() {

    $("#map").click(myFunc);
    $("#map").click(function() { alert("not triggered") });

    });
</script>
0 голосов
/ 13 октября 2009

должно быть

$("#map").click(myFunc);

а не

$("#map").click(myFunc());

передача myFunc() вместо myFunc фактически вызывает эту функцию

0 голосов
/ 13 октября 2009
$("#map").click(myFunc);

НЕ

$("#map").click(myFunc());
...