Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一旦改变而不失去焦点?_Javascript_Focus_Onchange - Fatal编程技术网

Javascript 一旦改变而不失去焦点?

Javascript 一旦改变而不失去焦点?,javascript,focus,onchange,Javascript,Focus,Onchange,我正在创建一个带有选择下拉列表的表单。其中一个选项是“其他-请指定”,它应该显示一个额外的文本字段以获取更多详细信息 我使用onChange事件+一些简单的值检查(因为我不能依赖于位置)成功地做到了这一点 我开始测试它,并意识到虽然它在使用鼠标时工作得很好(在控件失去焦点后运行onChange),但在使用键盘时却没有工作(因为它还没有失去焦点)-只有在我按下tab键后才会出现更改(这看起来很奇怪) 在我看来,我似乎遗漏了一些明显的东西,我寻找了其他事件,我发现最近的是onclick,但也不是这样

我正在创建一个带有选择下拉列表的表单。其中一个选项是“其他-请指定”,它应该显示一个额外的文本字段以获取更多详细信息

我使用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);
    });