簡體   English   中英

為什么我不能使用onClick在jQuery $(document).ready函數中執行函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM