2009-10-13 180 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> 
相关问题