js动态改变input的值不触发input的change事件的解决办法

看了网上的资料也比较杂,自己也做一个整理共享一下解决方案

1.原生js的改变之后手动添加监听

<body>
    <input type="hidden" id="ttt" /><br/>
    <select id="eee" >
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
</body>
<script type="text/javascript">
        var ttt =  document.getElementById("ttt");
        var eee =  document.getElementById("eee");
        eee.onchange=function (){
            ttt.value=eee.value;
            ttt.addEventListener("input",changeValue(),false);
        }
        function changeValue(){
            alert(ttt.value);
        }
</script>

需要注意的是,ttt添加的监听的方法名一定要加(),就是在eee的change事件触发的是否给ttt赋值,并且手动触发ttt的change事件

2.添加自定义属性触发事件(推荐)

<body>
    <input type="hidden" id="ttt" /><br/>
    <select id="eee" >
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
</body>
<script type="text/javascript">
        var ttt =  document.getElementById("ttt");
        var eee =  document.getElementById("eee");
        eee.onchange=function (){
            ttt._value=eee.value;
        }
        Object.defineProperty(ttt,"_value",{
        	configurable:true,
        	set:function(value){
        		this.value = value;
        		changeValue();
        	},
        	get:function(){
        	    return this.value;	
        	}
        });
        function changeValue(){
            alert(ttt.value);
        }
</script>

这种方式不需要添加监听,是通过添加自定义属性并且在自定义属性的set方法里触发input的值改变事件

3.jquery的手动触发input改变事件

	<body>
    <input type="text" id="two" /><br/>
    <select id="three" >
        <option>1</option>
        <option>2</option>
        <option>3</option>
    </select>
    <input type="hidden" id="one" />
    <input type="hidden" id="four" />
    <input type="text" id="five" />
	</body>
	<script type="text/javascript">
    	$("#two").on("change",function(){
    		~!($("#one").val())>-2 ? alert($("#one").val()) : ($("#one").on("change",function(){
    		alert($(this).val());
    	}));
    	});
    	$("#three").on("change",function(){
    		$("#two").val($(this).val());
    		$("#two").change();
    	});
    	
    	var index = 0;
    	setInterval(function(){
    		index ++;
    		$("#five").val(index);
    		if (index == 10) {
    			$("#one").val($("#three").val());
    			$("#one").change();
    		}
    	},1000);
    </script>

这种方式是在值改变的时候手动触发change事件,这里的代码是select框的值改变了,并且当#one这个input框有值了才触发,就是满足两个事件才执行

转载于:https://my.oschina.net/ThreeTiger/blog/1620531

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值