1

我正在研究一种 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 文本表单。

一旦我“聪明起来”这个方法来匹配部分字符串 - 即,当我到目前为止输入的所有内容都是“pat”时,将 div 与“患者”的 id 匹配 - 这可能不是问题,但那是一个偶然的修复,我对此并不完全兴奋。如何在调用此方法的其余部分之前更新文本字段的值?super()我可以实现一个或类似的东西,以便keypress在调用之前实际发生并更新字符串val()

4

4 回答 4

1

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

于 2013-06-10T18:49:18.157 回答
1

如果您想在处理程序被触发之前更新输入,只需使用keyup事件。

于 2013-06-10T18:55:42.057 回答
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()通常用于延迟一段代码块的执行一段时间。但是,当以零时间调用时,它具有在它正在执行的所有其他操作完成后立即运行代码的实际效果。

于 2013-06-10T18:51:10.507 回答
0

keyup像其他人建议的那样工作

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

于 2013-06-10T19:28:18.960 回答