我有一个标准引导预输入元素有几个问题,它有一个附加的 onchange 事件,如下所示:
<input id="element1" />
<script type="text/javascript">
var $element1 = $j("#element1");
var $output = $j("#output");
$element1.typeahead({
"source": ["apple", "airplane", "astronaut", "balloon", "banana"],
"items": 25
});
$element1.on("change", function() {
console.log("onchange fired");
});
</script>
问题:
1) 如果您开始输入一个值并按 Tab,则预先输入会自动完成,但用户不会移动到下一个输入字段。我认为这种行为是错误的。Tab 键应该将用户带到下一个字段。但是,也许有充分的理由说明它为什么会这样?有人知道吗?
2)如果我附加一个 jquery onchange 事件,那么它将在 firefox 中被触发两次(但不是 chrome 或 IE)。为什么会这样?您可以按照下一段中的步骤并使用此 jsfiddle 进行测试:http: //jsfiddle.net/e4zDx/4/
开始在第一个输入字段中输入“a”并按 Tab。该字段是自动完成的,触发了 onchange 事件,并且光标遗憾地保留在输入字段中(这是问题 1)。再次按 Tab 会将光标移动到下一个字段,此时 firefox(不是 chrome 或 IE)将再次触发 onchange 事件,如我在 jsfiddle 中的输出 div 所示。
我知道我可以在 onchange 事件中捕获当前值并将其存储在元素的属性中,例如 data-oldvalue 并且仅在当前值与旧值不同时才执行 onchange。但是,我真正想知道的是,为什么 firefox 会触发 onchange 事件两次,而 chrome 和 ie 却没有。
我有 Windows 7,我使用的浏览器版本是:
Firefox 18.0
Chrome 23.0.1271.97 m
IE 8(浏览器模式 IE8,文档模式 IE8 标准)