我有这个脚本可以正常添加/删除模糊/焦点文本输入和textareas上的类 - 但是我需要将它绑定到也可以处理通过AJAX页面加载后添加的内容:
$(function() {
$('input[type=text], textarea').addClass("idleField"); // reset all ##
$('input[type=text], textarea').bind("focus", function(event){
$(this).removeClass("idleField").addClass("focusField");
if (this.value == this.defaultValue){
this.value = '';
}
if(this.value != this.defaultValue){
this.select();
}
}).bind("blur", function(event){
$(this).removeClass("focusField").addClass("idleField");
if ($.trim(this.value) == ''){
this.value = (this.defaultValue ? this.defaultValue : '');
}
});
});
这不是将事件绑定到新内容 - 任何想法?
答案 0 :(得分:10)
不使用.bind
,而是使用.on()
:
$( document ).on( 'focus', 'input[type=text], textarea', function() {
// stuff here will be applied to present and *future* elements
});
答案 1 :(得分:1)
.bind()方法适用于当前存在的元素。要将事件处理程序附加到DOM 中当前存在的元素和可能存在的任何未来元素,您应该使用.live()方法。如果您不希望事件一直冒泡到DOM的顶部,也可以使用.delegate()方法。
此外,您可以使用.toggleClass()方法在一个函数调用中切换元素上的类。因此,您的代码将是:
$(function() {
$('input[type=text], textarea').addClass("idleField"); // reset all ##
$('input[type=text], textarea').live("focus", function(event){
$(this).toggleClass("focusField idleField");
if (this.value == this.defaultValue) {
this.value = '';
}
if (this.value != this.defaultValue) {
this.select();
}
}).live("blur", function(event){
$(this).toggleClass("focusField idleField");
if ($.trim(this.value) == ''){
this.value = (this.defaultValue ? this.defaultValue : '');
}
});
});