jquery将焦点/模糊事件绑定到AJAX加载的内容

时间:2011-01-26 23:38:22

标签: jquery ajax focus bind blur

我有这个脚本可以正常添加/删除模糊/焦点文本输入和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 : '');
   }
  });

 });

这不是将事件绑定到新内容 - 任何想法?

2 个答案:

答案 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 : '');
        }
    });
 });