从jquery发送变量到javascript函数

时间:2011-11-20 18:37:16

标签: javascript jquery

我有一个jquery mouseover事件,它成功调用了一个javascript函数

$(document).ready(function() {
$('.nw').mouseover(run_nw);
});

function run_nw() {
...
}

然而,当我尝试传递参数时,js失败。

$(document).ready(function() {
$('.nw').mouseover(run_nw(1));
});

var a;
function run_nw(a) {
...
}

尝试通过SO和jQ文档查看,但我仍然难过。我假设这是一个简单的格式化问题。

由于

(如果有帮助,这是完整的代码)

    <script>
    var $ = jQuery.noConflict();
    var incr = 650;

        function run_nw() {
            //move x and y
            var topAdjust = -incr;
            var leftAdjust = -incr;

            var top = parseInt($(this).css('top'))+topAdjust;
            var left = parseInt($(this).parent().css('left'))+leftAdjust;

            //rotate
            var randomnumber = Math.floor(Math.random()*11);
            var rotate = -randomnumber*10;

            $(this).animate({
                top:top,
                left:left,
                'rotate':rotate
            }, 700, 'swing');
        }

        $(document).ready(function() {
            $('.nw').mouseover(run_nw);
        });
    </script>

1 个答案:

答案 0 :(得分:4)

用匿名函数包装函数调用:

$('.nw').mouseover(function() {
    run_nw(1);
});

您当前拥有它的方式将执行该函数,并将该函数的结果作为回调传递给mouseover

<强>更新

当前代码的问题在于,在事件处理函数中,this没有引用您期望的内容(它指的是Window,因为您从匿名回调调用函数到{ {1}} - 匿名回调中的mouseover就是你想要的那样。)

因此,您需要将this传递给函数并将对this的任何引用更改为您选择命名该参数的任何内容:

this

这是一个updated fiddle