我有一个脏文本变量,我需要在文本更改,单选按钮更改或表单中的下拉列表更改中设置。不幸的是通用:
$(':input').live('change',function(){... })
还会检测焦点的变化...从而对脏文本产生误报。
答案 0 :(得分:0)
回调函数将eventType
作为第一个参数。检查它是否为focus
并忽略它,如果是的话。请参阅method declaration。
答案 1 :(得分:0)
你遇到了更大的问题,因为change
无法检测到文字更改,除非重点发生变化。无线电按钮和下拉列表会立即触发change
但不会发送文字。
来自jQuery .change()
文档:
更改事件在其值更改时发送到元素。此事件仅限于元素,框和元素。对于选择框,复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型,事件将延迟,直到元素失去焦点。
对于文字,通常的解决方案是检查每个 .keyup()
的更改
为了确保您没有模糊,可以使用 event.type
而不是blur
$(selector).change(function(event) {
if (event.type == "blur") return false;
....
});
但只有.change()
才会需要这个,如果您要检查下面的按键,则不需要这样做:
因此,对于文本,您必须执行以下操作:
$(function() { // <== Doc ready
var inputVal = $("input").val(); // a variable to hold the text
// set it up w the initial value then see
// if the input value changes.
$("input").keyup(function(event) {
// check for change of the text field after each key up
if(this.value != inputVal)
{
// Do your search, etc.
// ...
// Reset the temp value for the next comparison
inputVal = this.value
}
});
});