我正在使用 jquery 和 livequery 插件收听选择下拉菜单的更改事件。
$(".myDropdown").livequery("change", function () {
});
我注意到的一件事(我正在使用 Firefox)是
当我选择焦点时,事件处理程序不会因点击向上和向下箭头而触发(向上和向下箭头会更改条目)
为什么当我上下移动箭头键时不会触发更改事件,是否有建议或解决方法?
我正在使用 jquery 和 livequery 插件收听选择下拉菜单的更改事件。
$(".myDropdown").livequery("change", function () {
});
我注意到的一件事(我正在使用 Firefox)是
当我选择焦点时,事件处理程序不会因点击向上和向下箭头而触发(向上和向下箭头会更改条目)
为什么当我上下移动箭头键时不会触发更改事件,是否有建议或解决方法?
如果马伏里奥说的是真的,那应该管用
$(".myDropdown").livequery("change", function () {
// your event handler
}).livequery("keypress", function() {
$(this).trigger("change");
});
我想我会总结一下。
如果您单击选择框中的某个项目,则您正在更改它。如果您通过键向下通过选择框,直到您按下回车键才会被选中,单击关闭或 Tab 键离开。我想这从浏览器到浏览器略有不同,但基本上选择发生在“我完全完成了这个表单字段并现在离开”事件之类的事情上。
如果您希望结果更直接,您可以像这样触发更改事件:
$("select").live("keypress",function(){
$(this).trigger("change");
});
如果您希望在所有表单字段上都发生这种情况,请尝试使用此选择器:$(":input select textarea")
以下代码(无论如何在 Firefox 3.6 上)同意 OP 并且不同意评论者:
$('body').append('<select/>').find('select')
.append('<option>one</option)')
.append('<option>two</option>')
$('body').find('select').keypress(function() {
console.log('keypress: ' + $(this).val()); })
每当您按箭头键时,都会将更改的值打印到日志中。
在元素失去焦点之前不会触发更改事件,即使您正在更改值(正如 Malvolio 所证明的那样)。以下代码片段将在按下任意键时手动触发更改事件:
$("select").on("keypress",function(){
$(this).trigger("change");
});