我正在开发一个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()
之前更新字符串?
答案 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