1

我已经搜索了 SO 试图找到一个解决方案(或拼凑一个),但是我找不到我的困境的明确答案。

我正在尝试做的是以下内容:

$("#mini_search_input").keypress(function(event){

    var keycode = (event.keyCode ? event.keyCode : event.which);
    if(keycode == '13'){
        alert('my event!!');    
    }

});

现在,如果这个片段在display:block;. 但是,当它开始于display:none;然后我使用 a.show()来显示它时,keypress停止运行。我已经在 Chrome 和 Firefox 中对此进行了测试。

如果我以隐藏的方式启动元素,为什么该按键不会绑定到我的元素(没有控制台错误 - 只是不会“触发”),我是否遗漏了什么?

4

2 回答 2

1

您更有可能不仅仅是隐藏和显示元素。因为,如果元素存在于 DOM 中,即使它稍后生成,该事件也会display:none触发display:block

您可能正在动态填充该元素。在这种情况下,使用.on()使用事件委托

$(document).on('keypress', '#mini_search_input', function(event){
    //Your code
});
于 2013-10-30T15:45:21.373 回答
1

试试.on()

由于元素是动态添加的,因此您不能将事件直接绑定到它们。因此您必须使用事件委托

$(document).on('keypress', '#mini_search_input', function (event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        alert('my event!!');
    }
});

句法

$( elements ).on( events, selector, data, handler );
于 2013-10-30T15:45:22.723 回答