jQuery - 在执行此代码之前它能处理'实际'事件吗?

时间:2013-06-10 18:47:48

标签: jquery events

我正在开发一个jQuery方法,它将获取文本字段的val()show()hide()任何具有与文本字段值匹配的id的div。我希望代码能够确认键击是“搜索词”的一部分,而是在键击之前根据文本字段的当前值进行搜索。

代码段:(如果关键,可以提供更多,但我不相信)

handleTextType: function(event){
    //change visible divs on change event
    var currentText = $(this).val().replace(' ', '').toLowerCase(); //to match id names
    console.log(event); //testing junk
    console.log(currentText); //testing junk
    infoBot.revealMatches('#'+currentText); //other method which actual does the reveal
    //can't use e.preventDefault or return false - text field won't update!!
},

然后将此代码绑定到$('myTextField').keypress(),这只是一个HTML文本格式。

一旦我'聪明'这个方法有点匹配部分字符串 - 即匹配div与id'患者'当我到目前为止所有类型都是'拍'时 - 这可能是一个非问题,但这是偶然的修复,我对此并不十分兴奋。如何在调用此方法的其余部分之前获取文本字段的值以进行更新?是否有super()或类似的东西我可以实现以便实际keypress发生并在调用val()之前更新字符串?

4 个答案:

答案 0 :(得分:1)

如果您绑定keypress事件而不是keyup事件,则在调用事件处理程序之前更改字段的值。

答案 1 :(得分:1)

如果您希望在触发处理程序之前输入更新,请使用keyup事件。

答案 2 :(得分:0)

尝试使用超时为零的setTimeout来延迟代码执行,直到所有预定的事件处理程序都运行完毕为止。

例如,请参阅以下代码:

handleTextType: function(event) {
    var currentText = $(this).val().replace(' ', '').toLowerCase(); //to match id names
    setTimeout(function() {
        // code here to execute after all currently-scheduled
        // code (other event handlers) have been run
    }, 0);
},

setTimeout()通常用于在一段时间内延迟执行代码块。当调用时间为零时,只要其完成的所有其他操作都已完成,它就具有运行代码的实际效果。

答案 3 :(得分:0)

keyup的效果与其他建议一样

我更喜欢change,因为这只会在实际值发生变化时触发。按向上/向下/向左/向右箭头将触发keyup