#jquery #function #onclick
#jquery #функция #onclick
Вопрос:
У меня есть html-файл, который правильно связан с файлом js (а также с файлом библиотеки jquery).
<input type="button" onclick="practice();" id="intro_next_button" value="Practice"/>
Внутри файла js:
$(window).load(function(){
function practice(){
alert("WORKS");
}
});
Это выполняется, если функция practice находится за пределами $(window).load(function()
, но не тогда, когда она находится внутри нее. На этот счет есть много похожих вопросов, но я не нашел ни одного, который касался onclick event
бы только того, что не работает внутри jquery $(window).load(function()
.
Комментарии:
1. потому что функция находится в области блока onload и не является глобальной. Почему оно определено в onload? Переместите его.
2. О, у меня сложилось впечатление, что я должен поместить все в функцию onload, чтобы убедиться, что она работает.
3. Это было бы не так
Ответ №1:
Это не работает, потому что все, что определено (например, с помощью ключевых слов function или var) внутри функционального блока, применяет этот блок как область действия. Поэтому, если вы создадите переменную x внутри блока, у вас не будет значения снаружи.
var x = 2;
function test() { var x = 5; }
console.log(x);
Выводит 2.
Это также конкурирующие стили. Обычно, если вы используете window.onload или «улучшенный» jQuery $(document).готово, вы связываете события в теле функции.
$("#intro_next_button").click(function() { alert("WORKS"); });
Ответ №2:
Что вы делаете, так это определяете функцию внутри функции, которая передается в load() в качестве параметра.
onclick ищет practice() в области окна.
Почему вы хотите ОПРЕДЕЛИТЬ функцию при загрузке страницы? ждать, пока загрузится, чтобы пользователь мог щелкнуть по нему? Если это так, попробуйте следующее:
$(window).load(function(){
window.practice = function(){
alert("WORKS");
}
});
Комментарии:
1. Как мне вызвать
window.practice
функцию в onclick? Я попыталсяonclick="practice()"
иonclick="window.practice()"
2. когда вы определяете что-то в window, это в основном глобальная область. Нет необходимости вызывать window. functionname() В основном ВСЕ, что вы определяете без области видимости, определяется в window . 🙂 Попробуйте в этом коде: function test(){}; console.log(‘что?’, window.test);
Ответ №3:
В этом случае ваша функция видна только внутри анонимной функции, в которой вы определены load
. Вы должны прикрепить событие onclick к кнопке, используя jquery click
внутри load
(а также удалить onclick
атрибут):
$('#buttonid').click(function(){practice();});
Комментарии:
1. Если не мое, гибрид из нашего также может быть в порядке: $ (document).load(function() { $ (‘#buttonid’).click(function(){practice();}); });