Javascript 一旦改变而不失去焦点?
我正在创建一个带有选择下拉列表的表单。其中一个选项是“其他-请指定”,它应该显示一个额外的文本字段以获取更多详细信息 我使用onChange事件+一些简单的值检查(因为我不能依赖于位置)成功地做到了这一点 我开始测试它,并意识到虽然它在使用鼠标时工作得很好(在控件失去焦点后运行onChange),但在使用键盘时却没有工作(因为它还没有失去焦点)-只有在我按下tab键后才会出现更改(这看起来很奇怪) 在我看来,我似乎遗漏了一些明显的东西,我寻找了其他事件,我发现最近的是onclick,但也不是这样 所以问题是,有没有更好的方法来解决这个问题?可能会对你有所帮助。它使用这样的技巧:Javascript 一旦改变而不失去焦点?,javascript,focus,onchange,Javascript,Focus,Onchange,我正在创建一个带有选择下拉列表的表单。其中一个选项是“其他-请指定”,它应该显示一个额外的文本字段以获取更多详细信息 我使用onChange事件+一些简单的值检查(因为我不能依赖于位置)成功地做到了这一点 我开始测试它,并意识到虽然它在使用鼠标时工作得很好(在控件失去焦点后运行onChange),但在使用键盘时却没有工作(因为它还没有失去焦点)-只有在我按下tab键后才会出现更改(这看起来很奇怪) 在我看来,我似乎遗漏了一些明显的东西,我寻找了其他事件,我发现最近的是onclick,但也不是这样
// executes an onchange function after 750ms (or specified delay)
function safeOnChange1( code, delay ) {
delay = delay || 750;
window.clearTimeout( soc_id );
soc_id = window.setTimeout( code, delay );
}
// global timer ID for the safeOnChange1 function.
var soc_id = null;
这并不漂亮,但这就是在下拉列表中使用onchange函数的问题所在。另一种解决方案是函数每隔一段时间检查一次下拉列表的值,如果它改变了,则调用onchange函数
查找类似以下内容的教程:
还有一种jquery方法,如果您可以查找它,您只需将其添加到
标记中即可:
onkeyup="this.onchange();"
onkeyup=“this.onchange();
但如果没有变化,keyup事件可能会触发
使用angular和jquery的示例您可以根据需要实现这一点
$(“#mytxt”).on('keypress',function(){
console.log($(“#mytxt”).val())
})
角度示例:
jQuery示例:
var-app=angular.module(“myApp”,[]);
app.controller(“myCtrl”,函数($scope){
$scope.badri=函数(v){
控制台日志(v)
}
});
这是如何使用“marggg”答案(顺便说一句,这是这里唯一正确的答案,也是我在谷歌搜索之前想到的第一个想法):
onkeyup="this.onchange();"
// executes an onchange function after 750ms (or specified delay)
function safeOnChange1(code, delay) {
delay = delay || 750;
window.clearTimeout(soc_id);
soc_id = window.setTimeout(code, delay);
}
// global timer ID for the safeOnChange1 function.
var soc_id = null;
$('#your-input-element').keyup(function () {
safeOnChange1(function () {
var finalInputValue = $('#your-input-element').val();
if (finalInputValue != "") {
//do the work here
console.log(finalInputValue);
}
}, 1000);
});