在innerHTML命令之后,将JQuery函数重新绑定到输入字段
Rebind a JQuery function to an input field after innerHTML command
Im使用JQuery检查html文件输入字段中的文件大小和名称。输入字段为:
<div id="uploadFile_div">
<input name="source" id="imageFile" type="file" style ="border: 1px solid #576675;">
</div>
JQuery:
$(document).ready(function(){
$('#imageFile').bind('change', function() {
alert("Test");
//.... perform input checks...//
});
});
现在,我有一个选择框,用户可以在其中选择图像文件或视频文件,并根据它将文件发送到不同的服务器,同时执行适当的检查。为了重置输入字段(当用户将选择框从"视频"更改为"图像",反之亦然),我使用了以下JavaScript技巧:
document.getElementById('uploadFile_div').innerHTML = document.getElementById('uploadFile_div').innerHTML;
但是在执行了一次这个JavaScript之后,JQuery就没有被绑定,当我选择文件时也没有看到"测试"警报。
如何重新绑定JQuery?
谢谢。
您可以使用委托的事件处理程序,将事件绑定到父div:
$('#uploadFile_div').on('change','#imageFile', function() {
// etc
演示:http://jsfiddle.net/SfgpS/
(如果您使用的jQuery版本早于1.7,请使用.delegate()
而不是.on()
。如果您使用真正旧版本的jQuery,请使用.live()
。)
当您重写容器的.innerHTML
时,它会有效地擦除旧的输入元素,包括绑定到它的事件处理程序,然后创建新的输入。因此,此时可以重新运行原始的.bind()
语句,将处理程序绑定到新的输入。
对于.on()
的语法,使用委托的事件处理程序可以将处理程序绑定到容器,即在本例中绑定到div。发生在容器的子级(ren)上的事件冒泡到容器(然后直接到文档)。因此,在这种情况下,当更改事件到达div时,jQuery会检查它是否源自与.on()
的第二个参数的选择器匹配的元素,如果是,则调用处理程序函数。这使您可以处理在创建处理程序时不存在的元素上的事件。删除并重新添加子元素并不重要,因为处理程序已绑定到容器。
(请注意,如果将第二个参数留给.on()
,它将创建一个与.bind()
相同的非委托处理程序。)
为什么不把整个混乱打包到一个函数中呢?您可以同时调用onReady
,然后在任何时候重置上传表单?
var resetUpload = function() {
document.getElementById('uploadFile_div').innerHTML = document.getElementById('uploadFile_div').innerHTML;
$('#imageFile').bind('change', function() {
alert("Test");
//.... perform input checks...//
});
}
// run on ready
$(document).ready(function () {
resetUpload();
});
您使用的是什么版本的jQuery?
您可以使用.live()
或.on()
(jQuery>=1.7)而不是.bind()
- 同一页面上两个不同控制器的Angularjs双向绑定字段
- Knockoutjs-我无法使字段绑定
- javascript绑定另一个select2输入字段rails的select2 inputonchange事件的数据
- KO 绑定复选框:从代码更改“选中”属性,不更改可观察字段
- AngularJs的Kendo UI:当用户在网格中选择行时,如何在文本框字段上绑定数据
- 在innerHTML命令之后,将JQuery函数重新绑定到输入字段
- Emberjs 车把内容绑定编辑字段不起作用
- 将输入字段绑定到 Angularjs 中的数组
- 如何将计算值绑定到 Angular 中的 ng-model 字段.js以便我可以使用 Ruby on Rails 将完整
- 反应:将数组绑定到动态添加的字段
- 如何将复杂对象绑定到剑道调度程序中的字段
- KnockoutJS,文本与值绑定.为什么文本绑定不绑定到输入字段
- ExtJS 5:显示字段绑定性能
- ExtJS 4 组合框在表单绑定上显示值字段而不是显示字段
- 2 个输入字段上的单向数据绑定
- 绑定字段定位标记
- 附加隐藏的输入字段并将它们绑定到模型
- 根据组合框中不同的选定值绑定字段状态(禁用或隐藏)
- 使用JavaScript计算“绑定”字段“列”值的总和
- 如何绑定字段集值