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

Why is this jQuery trigger not working?

本文关键字:触发器 不起作用 jQuery 为什么      更新时间:2023-12-11

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

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/

您必须触发已绑定的相同事件,并在传递时侦听相同的属性(e.that(:

$("#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);
});

小提琴

你的代码有 2 个问题。首先,您绑定了一个keypress事件,但您的事件是一个keydown

此外,您检查keyCode但更改which

改变这些,它工作:http://jsfiddle.net/tt36q/4/

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

也许尝试替换

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

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