Почему jQuery click-событие срабатывает при загрузке страницы?

У меня есть следующий код .... Когда страница загружена 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>
13.10.2009 07:03:20
7 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

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

нажмите ()

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

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

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

10
13.10.2009 07:05:22

Должно быть

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

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

2
13.10.2009 07:05:22

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

<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.10.2009 07:05:30
$("#map").click(myFunc);

НЕ

$("#map").click(myFunc());
0
29.08.2012 08:31:48

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

$("#map").click(myFunc);
3
13.10.2009 07:05:59
Хорошее описание ошибки. Я могу добавить, что функции, которые должны быть переданы в функции, должны быть объявлены так: var MyFunc = function () {...}. Однако большинство (все?) Веб-браузеров по-прежнему принимают стандартное объявление (функция MyFunc () ...).
Björn 13.10.2009 07:09:22
@ Björn: Ваше объявление функции не является неправильным. Вы просто передаете неправильное значение, $("#map").clickпоскольку myFunc()вызовет ссылки на функции, myFuncа затем будет передано только его возвращаемое значение $("#map").click.
Gumbo 13.10.2009 07:23:01
Ху? Моя декларация? Я ничего не передаю в JQuery, я часто заканчиваю тем, что использую Mootools;) Я думаю, что вы путаете меня с OP. Я только что дал совет, как правильно объявить функцию для передачи ее в качестве параметра другим функциям ...
Björn 13.10.2009 07:43:18
@ Бьорн: Ах, прости, теперь я вижу. Но есть разница между оператором объявления функции и оператором выражения функции . См yura.thinkweb2.com/named-function-expressions
Gumbo 13.10.2009 08:51:00

должно быть

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

и не

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

прохождение myFunc()вместо того, чтобы на myFuncсамом деле вызвать эту функцию

0
13.10.2009 07:06:00

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

$("#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.10.2009 07:09:24