js无法监听input值的变化,如何解决?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <input type="text" id="input" value="0">
    <span class="btn">+1</span>

    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
    <script>
        $(function(){
            /*改变input值*/
            $(".btn").on("click",function(){
                let new_value =  parseInt($("#input").val()) + 1;
                $("#input").val(new_value);
            });
            /*监听input值的变化*/
            $("#input").bind("input propertychange",function(){
                console.log($(this).val());
            });
        });
    </script>
    
</body>
</html>

如上代码,通过程序改变input值时,无法监听到input值的变化,请问该如何改进?

注意是通过js改变input值,而不是键盘输入。请勿在js改变input值的函数里触发数据监听函数,上述代码仅作示意

谢谢。

阅读 9.6k
7 个回答

用defineProperty吧

<input type="text"  id="aaa" value="1" />
<button id="btn">add1</button>

             var aaa =document.getElementById("aaa");
            var btn =document.getElementById("btn");
            var obj = {};
            btn.onclick=function(){
                if(aaa.value){
                    obj.val = parseInt(aaa.value)+1;
                }else{
                    obj.val = 1;
                }
            }
            valcahnge(aaa,function(){
                console.log(aaa.value);
            });
            function valcahnge(dom,fn){                    
                Object.defineProperty(obj,'val',{
                    get:function(){                    
                        return this._val;
                    },
                    set:function(val){
                        dom.value = val;
                        fn();
                        this._value=val;
                    }
                });            
            }

既然是js改变的就代表知道调用的时机
改变的时候调用change里的方法就行了

控制台打印出来了啊~或者试试keyup

不用监听input事件。直接取值比较

当 js 修改 input 内容时可以手动触发事件执行: $("#input").trigger('input');

逻辑有问题,很多时候做不出来不是没有这个方法而是你的思路错了,既然js控制input变化,那就只需要同时调用相应的方法

新手上路,请多包涵

可以在input上挂载一个自定义的方法
clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题