为什么这个jQuery触发器不起作用?

时间:2013-11-28 19:26:30

标签: javascript jquery

我正在尝试触发一个应该被绑定捕获的事件:

var input = $("#input");
input.bind("keypress", function (e) {
    //textarea.attr('name', textarea.textrange('get').position);
    if (String.fromCharCode(e.keyCode) == '@') {
        alert('@');
    }
});
var e = jQuery.Event("keydown");
e.which = 64; // # Some key code value

$("#press").click(function () {
    $("#input").val($("#input").val() + '@')
    $("#input").trigger(e);
})

当我单击按钮时,我看到插入的字符,触发器被触发,但绑定从未捕获它。我究竟做错了什么?

JSFiddle:http://jsfiddle.net/tt36q/1/

3 个答案:

答案 0 :(得分:1)

你必须触发你所绑定的同一事件,并听取你传递的相同属性(e.which):

$("#input").on("keydown", function (e) {
    if ( e.which) === 64) {
        alert('@');
    }
});

var e = jQuery.Event("keydown");
e.which = 64; // # Some key code value

$("#press").click(function () {
    $("#input").val($("#input").val() + '@')
    $("#input").trigger(e);
});

FIDDLE

答案 1 :(得分:0)

您的代码存在2个问题。首先,您绑定了keypress个活动,但您的活动是keydown

另外,您检查keyCode,但更改了which

更改它们并运作:http://jsfiddle.net/tt36q/4/

var e = jQuery.Event("keypress");
e.keyCode = 64; // # Some key code value

答案 2 :(得分:0)

也许尝试替换

input.bind("keypress", function (e) { ...

通过

input.bind("keydown", function (e) { ...