jquery ::为什么要立即悬停触发?

时间:2015-10-14 03:20:04

标签: javascript jquery

为什么在加载页面后会立即触发悬停事件?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="" id="1">sup</a>
void makeit(string what){
    const char* options_in[];
    if(what == "option1"){
        options_in[] = {"set1", "set2", "set3"};
    } else {
        options_in[] = {"set1"};
    }
    /* ... */
}

2 个答案:

答案 0 :(得分:2)

因为您正在调用该函数而不是引用它。

$("#1").hover(showSelector(17), hideSelector);
//                        ^^^^

使用showSelector(17)作为hover函数的回调将首先调用该函数,然后将其返回值分配给悬停回调。要解决此问题,可以使用匿名函数作为回调,然后使用参数调用其中的函数。

function showSelector(position) {
  alert(position);
}

function hideSelector() {}

$("#1").hover(function() {
  // Use anonymous function
  // Call the function with parameter here
  showSelector(17);
}, hideSelector);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="" id="1">sup</a>

答案 1 :(得分:2)

因为您通过在末尾添加()来调用该函数,所以您可以做的是将一个匿名函数作为mouseenter回调函数传递,该函数可以使用所需的参数调用showSelector,如

function showSelector(position) {
  alert(position);
}

function hideSelector() {}

$("#1").hover(function() {
  showSelector(17)
}, hideSelector);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="" id="1">sup</a>