[英]Why can't I put my function inside jQuery(document).ready(function() { }
[英]Why can't I use onClick to execute a function inside a jQuery $(document).ready function?
我是Java和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>
這是因為該函數不在全局上下文中,這是您的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');
}
您可以在document.ready中將doIt定義為函數語句。
您應該使用函數表達式或在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方式,可能應該由ready函數中定義的點擊處理程序代替,但可以並允許使用 。
您需要做的是使用jquery將“ click”事件綁定到它。
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/
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'); }
})
$(document).ready(function()
{
});
是document.ready的事件處理程序,該處理程序內部的功能在該范圍內。
更好的方法是在內部為click事件插入一個處理程序,然后在其中調用該函數。
$(document).ready(function()
{
alert('ready');
$('body input').click(function(){
doIt();
});
function doIt() {
alert('did it');
};
});
這也具有從標記中刪除代碼的副作用(這是一件好事),因為您可以從輸入代碼中刪除該onclick。
您現在正在做的只是將一個函數doIt()放在(出於所有意圖和目的)window.onload事件中。 除非您將其綁定到元素,否則此函數將永遠不會在document.ready之外調用,因為它卡在document.ready的范圍內。
您需要將函數移到document.ready之外,以便外部事件可以調用它。
只是一個參考鏈接: http : //www.webdevelopersnotes.com/tutorials/javascript/global_local_variables_scope_javascript.php3
嘗試這個...
$(document).ready(function() {
alert('ready');
$("#Go").submit(function(event) {
alert('did it');
});
});
<input name="Go" id="Go" type="button" value="Go" />
是的,正如其他人所提到的,您確實需要將函數移到jquery ready聲明之外。 另外請注意,JavaScript區分大小寫,因此您應該使用onClick而不是onclick。 問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.