javascript – jquery .change未触发,即在.live中使用.val(‘keyup’,function()
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – jquery .change未触发,即在.live中使用.val(‘keyup’,function(),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2813字,纯文字阅读大概需要5分钟。
内容图文
我正在尝试做一个只接受数字的输入.我可以有一些动态输入,所以我使用.live函数.
在我的.live(‘keyup’)函数中,我添加了一些“,”取决于输入长度.
这是我输入代码的一部分(非动态):
$(document).ready(function(){
$('#test').change(function() {
alert('trigger change');
});
});
$('#test').live('keyup', function() {
var realDotPos = $(this).val().indexOf('.');
var inputValue = '';
var inputDecimals = '';
var value = '';
var length = 0;
var cptMod = 0;
var cptVirgule = 0;
if (realDotPos == -1){
inputValue = $(this).val().replace(/,/g, '');
} else{
inputValue = $(this).val().substring(0,realDotPos).replace(/,/g, '');
inputDecimals = $(this).val().substring(realDotPos);
}
length = inputValue.length;
if (length > 3){
for(i=length-1; i>=0; --i){
if ((cptMod != 0) && (cptMod % 3 == 0)){
value += ',' + inputValue[i];
++cptVirgule;
} else{
value += inputValue[i];
}
++cptMod;
}
value = value.split('').reverse().join('');
$(this).val(value + inputDecimals);
} else{
$(this).val(inputValue + inputDecimals);
}
});
这个问题是,即当我点击输入时,不会触发.change函数. FF或铬工作正常.如果我删除行$(this).val(inputValue inputDecimals);触发器有效.怎么了?
解决方法:
我创建了这个jsfiddle来测试你的代码.
对于我来说,更改事件不会在Chrome中触发,也不会像在IE中那样触发.
你可以做的是通过调用.change()来触发change事件:
$(this).val(value + inputDecimals).change(); // or with .trigger('change')
活动代表团:
.live()已在新版本的jQuery中弃用,你应该寻找.on()(如果你不使用最新版本,请检查.delegate())
将.on()与选择器一起使用将委托事件处理,从而处理初始化后插入dom中的任何元素(由选择器表示).
所以在这里我委托文档,事件更改/ keyup为所有内部元素有一个类’.myinput’:
我为你提供了一个小提示,以显示更新的代码,以及在添加动态新输入时它是如何工作的:http://jsfiddle.net/didierg/xw7SV/9/
这是更新的js代码(带有优化和事件委托):
$(document).ready(function() {
$(document).on('change', '.myinput', function(e) {
alert('trigger change');
});
$('#test').on('keyup', '.myinput', function(e) {
var $this = $(this), // select 'this' only once
currval =$this.val(), // keep the initial value to work with
newvalue = null,
realDotPos = currval.indexOf('.'),
inputValue = '',
inputDecimals = '',
value = '',
length = 0,
cptMod = 0,
cptVirgule = 0;
if (realDotPos == -1) {
inputValue = currval.replace(/,/g, '');
} else {
inputValue = currval.substring(0,realDotPos).replace(/,/g, '');
inputDecimals =currval.substring(realDotPos);
}
length = inputValue.length;
if (length > 3) {
for(i=length-1; i>=0; --i) {
if ((cptMod != 0) && (cptMod % 3 == 0)){
value += ',' + inputValue[i];
++cptVirgule;
} else{
value += inputValue[i];
}
++cptMod;
}
value = value.split('').reverse().join('');
newvalue = value + inputDecimals;
} else {
newvalue = inputValue + inputDecimals;
}
$this.val(newvalue).change(); // call .change() to trigger the event
});
});
关于代码的一些注意事项:
>你应该保存你的选择:var $this = $(this);
>除了值,得到一次:var val = $this.val()
内容总结
以上是互联网集市为您收集整理的javascript – jquery .change未触发,即在.live中使用.val(‘keyup’,function()全部内容,希望文章能够帮你解决javascript – jquery .change未触发,即在.live中使用.val(‘keyup’,function()所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。