将函数传递给jquery键事件?

时间:2014-02-19 06:52:06

标签: javascript jquery

我有一个函数foo(peram),我想从多个jquery .keyup()事件中调用它。

如何定义/传递函数foo以便我可以从事件内部调用它?

我试过这样的事情:

function foo(peram) {
alert(peram);
}

$("#someElement").keyup(function(alert) {
foo("You pressed a key!");
});

但是我得到TypeError: foo is not a function


更新

我已经删除了我的脚本和HTML中的所有内容,但它仍无效。

HTML:

<html>
  <head>
    <script src="../jquery-1.10.2.js" type="text/javascript"></script>
    <script src="test.js" type="text/javascript"></script>
  </head>
  <body onload="asdf()">
      <input type="text" name="name">
  </body>
</html> 

test.js

function asdf() {

function hqxftg(stuff) {
  alert(stuff);
}

$(document).ready(function() {
$('[name="name"]').keyup(function(hqxftg) {
  alert(typeof hqxftg) 
    hqxftg("asdf");
})
})
}

出于某种原因,似乎在jsfiddle中工作。

3 个答案:

答案 0 :(得分:2)

这是因为您已将事件参数命名为与函数

相同的参数
function asdf() {

    function hqxftg(stuff) {
        alert(stuff);
    }

    $(document).ready(function () {
        $('[name="name"]').keyup(function (event) {
            alert(typeof hqxftg)
            hqxftg("asdf");
        })
    })
}

事件回调keyup接收事件对象作为第一个参数,您将其命名为hqxftg,它将覆盖外部范围的函数名称。

此外,无需使用onload="",您只需使用dom ready回调

jQuery(function ($) {
    function hqxftg(stuff) {
        alert(stuff);
    }
    $('[name="name"]').keyup(function (event) {
        alert(typeof hqxftg)
        hqxftg("asdf");
    })
})

答案 1 :(得分:1)

你错过了几件事......

1)在调用foo()

结束时,你错过了;

2)您缺少关闭jQuery选择器的标签

当你尝试这个时它会起作用:

function foo(peram) {
  alert(peram);
}

$("#someElement").keyup(function(alert) {
  foo("You pressed a key!");
});

JSFiddle here...

更新:帖子已更新,我的原始评论已过时。 我会赞同Derek的评论。

我能够重现这个问题:JSFiddle

您是否也将foo声明为var?

是否正确?

答案 2 :(得分:0)

试试这段代码。 HTML

<input id="someElement" />

Java脚本:

function foo(peram) {
alert(peram);
}
$( document ).ready(function() {
    $("#someElement").keyup(function() {
       foo("You pressed a key!");
     });
});

Demo