[英]problem in run some js codes after click
为什么搜索后,点击搜索结果,点击加号(按钮添加输入)在本例中的部分添加输入 ,日期格式化( $('.find_input').delegate('input.date:text', 'keyup', ....
)和常规数字格式设置( $('.find_input').delegate('input.numeric:text','keyup',...
)不起作用。
示例: http : //www.binboy.gigfa.com/admin/tour_foreign/insert_foreign
js完整代码: http : //jsfiddle.net/ZpDDR/
...
///// Date formating /////////////////////////////////////////////////////////////////////////////////////////
$dateSet = 0;
$monthSet = 0;
$yearSet = 0;
$('.find_input').delegate('input.date:text', 'keyup', function () {
$val = $(this).val().replace(/[^\d]+/g, "").match(/\d{1,12}$/);
if($val == null) {
return;
} else {
$val = $val.join("");
}
if($(this).val().match(/\d{4,}$/) && $val.length%2 == 0) {
$val = $val.match(/\d{2}/g);
if($yearSet < $monthSet) {
if($val.length == 4) {
$(this).val($val.join("").replace(/(\d{2})(\d{2})(\d{4})$/,'$3/$1/$2'));
$yearSet++;
} else if($val.length == 6){
$(this).val($val.join("").replace(/(\d{4})(\d{2})(\d{2})(\d{4})$/,'$4/$2/$3'));
$yearSet++;
}
} else {
if($monthSet < $dateSet) {
$(this).val($val.join("").replace(/(\d{4})(\d{2})(\d{2})(\d{2})$/,'$1/$4/$3'));
$monthSet++;
} else {
if($val.length == 2) {
$(this).val($val.reverse().join("/"));
$dateSet++;
$monthSet++;
} else {
$(this).val($val.join("").replace(/(\d{4})(\d{2})(\d{2})(\d{2})$/,'$1/$2/$4'));
$dateSet++;
}
}
}
}
});
///normal number formatting/////////////////////////////////////////////////////////////////////////////////////////
$('.find_input').delegate('input.numeric:text','keyup',function () {
$val = $(this).val().match(/[0-9]/g).reverse().join("").match(/[0-9]{1,3}/g).join(",").match(/./g).reverse().join("");
$(this).val($val)
});
问题在于,当您设置委托函数时,要委托的元素.find_input
尚不存在。 delegate
允许为尚未创建的元素定义事件处理程序,但仅定义与第二个选择器匹配的元素,例如$('#must-exist-now').delegate('.can-be-created-later', ...);
我不确定我的描述是否很好,但是解决方案是将您的语句更改为从DOM加载中已存在的内容委托。 例如: $(document).delegate('input.date:text', ...)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.