событие onclick не запускает функцию jQuery

#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();}); });