2009-10-13 209 views
3

我有以下代碼.... 當頁面加載時myFunc()被調用,即使我不點擊我的div。爲什麼? 函數聲明爲 「內聯」 則不會觸發... hmmmm ........爲什麼在頁面加載時觸發jQuery點擊事件?

<div id="map" style="background: green; height: 100px"></div> 

<script type="text/javascript"> 
    function myFunc() { 
     alert("allways triggered when page loads..."); 
    }; 

    $(document).ready(function() { 

    $("#map").click(myFunc()); 
    $("#map").click(function() { alert("not triggered") }); 

    }); 
</script> 

回答

10

因爲你的代碼:

$("#map").click(myFunc()); 

是錯誤的,必須是:

$("#map").click(myFunc); 

您的代碼將首先調用myFunc的()和比模擬onclick事件。

,如文檔中看到:

你做了這是什麼:(如myFunc的返回null)

點擊()

觸發每一個匹配元素的click事件。 導致所有已綁定到該點擊事件的功能被執行。 觸發頁面上所有段落的點擊事件: $(「p」)。click();

你想要的是這樣的:

點擊(FN) 綁定到每一個匹配元素的click事件的功能。 點擊指定設備按鈕單擊元素時會觸發click事件。點擊被定義爲在同一屏幕位置上的mousedown和mouseup。這些事件的順序是:

+0

太謝謝你了.... – 2009-10-13 07:10:47

1

應該

$("#map").click(myFunc); 

這樣,你給函數作爲參數。 $("#map").click(myFunc());觸發該功能,並給出其結果作爲參數。

1

你在你的click事件處理函數中調用你的函數。做到這一點,而不是:

<script type="text/javascript"> 
    function myFunc() { 
     alert("allways triggered when page loads..."); 
    }; 

    $(document).ready(function() { 

    $("#map").click(myFunc); 
    $("#map").click(function() { alert("not triggered") }); 

    }); 
</script> 

您只需通過名稱的功能,沒有括號,路過時,它作爲參數傳遞給事件處理程序(或任何其它功能)。

0
$("#map").click(myFunc); 

$("#map").click(myFunc()); 
3

隨着$("#map").click(myFunc())myFunc()你打電話的myFunc,只有它的返回值傳遞給$("#map").click函數的引用。如果你想通過myFunc功能本身,離開括號路程,只使用功能名稱:

$("#map").click(myFunc); 
+0

錯誤的很好的說明。我可以添加應該傳遞給函數的函數,應該聲明爲:var MyFunc = function(){...}。但是,大多數(所有?)Web瀏覽器仍接受標準聲明(函數MyFunc()...)。 – 2009-10-13 07:09:22

+1

@Björn:你的函數聲明沒有錯。因爲'myFunc()'將通過'myFunc'調用函數引用,並且只有它的返回值將被傳遞給$(「#」)。地圖「)。click'。 – Gumbo 2009-10-13 07:23:01

+0

胡?我的聲明?我沒有向JQuery傳遞任何東西,我經常最終使用Mootools;)我認爲你讓我困惑於OP。我只是給出了一個提示,以正確的方式聲明函數,將它作爲參數傳遞給其他函數... – 2009-10-13 07:43:18

0

應該

$("#map").click(myFunc); 

,而不是

$("#map").click(myFunc()); 

傳遞myFunc(),而不是myFunc實際調用此功能

0

這是從您的代碼預計,因爲這裏:

$("#map").click(myFunc()); 

該函數後面的括號()將導致它被調用。

試試這個:

<script type="text/javascript"> 
    var myFunc = function() { 
     alert("allways triggered when page loads..."); 
    }; 

    $(document).ready(function() { 

    $("#map").click(myFunc); 
    $("#map").click(function() { alert("not triggered") }); 

    }); 
</script> 
相關問題