Почему я не могу использовать onClick для выполнения функции внутри функции jQuery $(document).ready?

Я новичок в Javascript и jQuery. Я хочу нажать кнопку и выполнить js-функцию. (Для этого примера это просто предупреждение, но на самом деле это функция ajax.)

Появится первое предупреждение, но после того, как я нажму кнопку, я не вижу второго ( "сделал это" ). Похоже, что javascript не считает, что функция doIt() определяется при нажатии кнопки.

Вот соответствующий код:

$(document).ready(function()
{ 
    alert('ready');

    function doIt() {
        alert('did it');
    };
}
)

<body>
    <input name="Go" type="button" value="Go" onclick="doIt();"/>
</body>

Ответы

Ответ 1

Это потому, что эта функция не находится в глобальном контексте, где ваш onclick="" ищет ее. Вам нужно переместить его за пределы document.ready (поэтому он не распространяется только на это закрытие) или (более подходящий подход IMO) связывает его внутри document.ready, вот что я подразумеваю под каждым:


Связывание внутри (удалите для этого onclick=""):

$(document).ready(function() { 
  alert('ready');
  $("input[name='Go']").click(doIt);
  function doIt() {
    alert('did it');
  }
});

или анонимную версию (снова удалите onclick=""):

$(document).ready(function() { 
  alert('ready');
  $("input[name='Go']").click(function() {
    alert('did it');
  });
});

Или переместите его снаружи (сохраните onclick=""):

$(document).ready(function() { 
  alert('ready');
});
function doIt() {
  alert('did it');
}

Ответ 2

Вы определяете doIt в документе document.ready как оператор функции.

Либо вы должны использовать выражение функции или объявить функцию из готовой функции.

$(document).ready(function()
{ 
    alert('ready');

    doIt = function() { //now has global scope.
        alert('did it');
    };
}
)

<body>
    <input name="Go" type="button" value="Go" onclick="doIt();"/>
</body>

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

Ответ 3

Что вам нужно сделать, это связать с ним событие "click" с помощью jquery, как это.

jQuery(document).ready(function($) {

    $('#my_button').click(function() {

        alert('i was clicked');

    });
});  

<input type="button" id="my_button" value="Go" />

Вот вам живая демонстрация jsfiddle: http://jsfiddle.net/8A5PR/

Вот страница руководства для вас: http://api.jquery.com/click/

Ответ 4

Javascript имеет два вида объема, глобального и функционального уровня. Если вы объявите doIt внутри функции, она не будет видна вне функции. Есть несколько способов исправить это.

//just declare the function outside the ready function
$(function() {
});
function doIt() { alert('did it'); }

//decare a variable outside the function
var doIt;
$(function() {
  doIt = function() { alert('did it'); }
});

// if you dont use var, variables are global
$(function() {
  doIt = function() { alert('did it'); }
})

Ответ 5

$(document).ready(function() 
{ 
});

является обработчиком событий для document.ready, функции внутри этого обработчика находятся в пределах этой области.

Лучшим способом является вставка обработчика для вашего события click внутри, а затем вызов этой функции.

$(document).ready(function() 
{  
    alert('ready'); 

  $('body input').click(function(){
    doIt();
  });
   function doIt() { 
        alert('did it'); 
    }; 
});

Это ТАКЖЕ имеет побочный эффект удаления кода из вашей разметки (что хорошо), поскольку вы можете удалить это onclick из вашего тега ввода.

Ответ 6

То, что вы делаете прямо сейчас, - это просто поместить функцию doIt() внутри события window.onload(для всех целей и задач). Эта функция никогда не будет вызвана за пределами документа. Если вы не привяжете ее к элементу, потому что она застряла внутри области document.ready.

Вам нужно переместить вашу функцию за пределы документа. Теперь она может быть вызвана внешними событиями.

Просто ссылка для ссылки: http://www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3

Ответ 7

Попробуйте это...

$(document).ready(function() {


    alert('ready');


        $("#Go").submit(function(event) {
           alert('did it');
        });

 });

<input name="Go" id="Go" type="button" value="Go" />

Ответ 8

Да, как уже упоминалось другими, вам действительно нужно переместить функцию вне объявления jquery ready. Также обратите внимание, что javascript чувствителен к регистру, поэтому вы должны использовать onClick, а не onclick. Отношения