2017-01-13 4 views
4

Эта простая функция не работает. Показываются следующая ошибкаПростая функция JQuery не работает

'MyFunc' не определено

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script> 
 
    $(document).ready(function(){ 
 
    function myfunc(){ 
 
     alert('In'); 
 
    } 
 
    }) 
 
</script> 
 
<button type="button" onclick="myfunc()">Alert</button>

ответ

6

Это вопрос сфера, MyFunc не в глобальном масштабе. Когда вы положите его внутри $(document).ready(), вы сможете только позвонить ему в обратном вызове document.ready().

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
    //this doesn't need to be in document.ready(), it won't get called until button is already loaded anyway 
    function myfunc() { 
    alert('In'); 
    } 
</script> 
<button type="button" onclick="myfunc()">Alert</button> 

Вы можете прочитать больше о том, как обзорное работает в JS в http://www.w3schools.com/js/js_scope.asp

+0

Большое спасибо за быстрый ответ и легко понять объяснение. :) –

0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> $(document).ready(function(){ 
function myfunc(){ 
    alert('In'); 
} });/*don't forget ;*/ 
</script> <button type="button" onclick="myfunc()">Alert</button> 
2

Проблема существует, потому что вы будете ждать с созданием функции, пока документ не будет готов. Документ будет готов, когда будут загружены все элементы DOM. Таким образом, ваша кнопка должна быть загружена до создания функции.

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

0

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script> 
 
    function myfunc(){ 
 
     alert('In'); 
 
    } 
 
    $(document).ready(function(){ 
 
    
 
    }) 
 
</script> 
 
<button type="button" onclick="myfunc();">Alert</button>

+0

написать свою функцию за пределами '$ (document) .ready' – Mubin

1

$(document).ready(function() { 
 
    $("#btn").click(function() { 
 
    alert('Button Clicked') 
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button type="button" id="btn">Alert</button>

Вы можете прикрепить событие к кнопке, как это. то просто предупредите что-нибудь

0

Это основная проблема с JavaScript: ваша функция myfunc является частной для неназванной функции «onload» jquery.

В общих чертах - и если вы все еще хотите, чтобы определить свою функцию внутри функции «OnLoad» - вы можете сделать это следующим образом (a() функция «OnLoad» и b() ваш myfunc()):

var b; // without this line it would still work, since 
     // b would implicitely become a global variable in a() 
function a(){ 
    // function b(){ ... would *not* work here 
    b=function(){ 
     alert('In'); 
    } 
} 
a(); 
b(); 

Теперь, возвращаясь к вашей реальной проблеме: решение, предоставляемое @guradio, безусловно, лучший способ продвинуться вперед, используя jquery так, как он должен был использоваться.