2013-05-16 3 views
1

Я создал пользовательскую переменную/функцию, которую я пытаюсь выполнить при щелчке элемента. По какой-то причине он решает отображать onload и игнорирует .click(). Я потратил некоторое время, пытаясь понять это, но мне не повезло.JavaScript .click() непреднамеренно автозапуск

Вот моя пользовательская функция:

var movebox = function (entry) { 
    $imagebox.css('left' , '0'); 
    $('#wr').append(entry); 
}; 

Я пытаюсь назвать это так, но он называет его при загрузке страницы вместо.

$l3.click(movebox('test')); 

ответ

0

Вы вызываете movebox затем передать возвращаемое значение щелкнуть обработчик события, в этом случае вы можете использовать регистрационный помощник .on() событий передать data элемент в обработчик событий, который можно получить с помощью объекта события ,

Попробуйте

var movebox = function (e) { 
    $imagebox.css('left' , '0'); 
    $('#wr').append(e.data.entry); 
    }; 

$l3.on('click',{ entry: 'test'}, movebox); 
+0

@down избирателя, чтобы объяснить –

+0

Привет, Арун, я не сторонник, но мне любопытно. Что это делает? Вы можете объяснить? Почему мы будем использовать «on» в этом случае? В стороне, я не понимаю, почему это не сработает, даже если это может быть излишним. – jmort253

+0

@ jmort253 'on' позволяет передать элемент данных в объект события, см. Это http://jsfiddle.net/arunpjohny/39MkV/ –

4

Вы звоните функцию movebox немедленно вместо передачи функции в качестве ссылки на обработчик события щелчка. Это распространенная ошибка в JavaScript. Вместо этого, передать в функции внутри анонимной функции, например, так:

$l3.click(function() { 
    movebox('test'); 
}); 

Как и в сторону, та же ошибка часто сделаны с SetTimeout, setInterval, addEventListener и позорный Eval. Помните, что, рассматривая функции как аргументы другой функции, обязательно заверните их в анонимные функции.

+1

Очень полезно! Спасибо за информацию! Я пробовал это ранее, не зная, что это сработает, но оказалось, что у меня был неправильный орфографический код в другом месте моего кода, который делал его неработоспособным. С этой информацией я дважды проверил свое правописание и внедрил ваши исправления и, конечно же, отлично работает. – user2388197

+0

Было ли это: '$ imagebox'? – jmort253

+0

$ imagebox в порядке, я думаю, это настраиваемая переменная, определенная мной ранее в коде. У меня на самом деле была ошибка в HTML. У меня была долгая ночь и я назвал что-то l2 вместо l3, поэтому единственный способ, которым я смог увидеть код, работал, когда он работал неправильно. – user2388197