2012-08-30 38 views
0

好的,有这样的问题...我试图减少验证字段所需的代码量。 在这种情况下,我创建了一个数组,其中包含我希望将事件绑定到的元素的ID。 像这样:jQuery:试图绑定事件时错误地引用对象

var fields = new Array('#edit-field-first-name', '#edit-field-last-name', '#edit-field-mobile'); 

在一个循环然后我绑定的事件:

for(var i = 0; i < fields.length; i++){ 
    if($('#user-profile-form ' + fields[i]).length > 0){ 
    var $obj = $('#user-profile-form ' + fields[i]); 
    $obj.bind({ 
     blur : function(){ 
        if(!reg_chars.test($obj.val())){ 
         $obj.css('border','1px solid #A14') 
          .parent().children('div.description').css('color', '#A14'); 
        }else{ 
         $obj.css('border-style','solid').css('border-color','#C5C3C3 #EDEDED #EDEDED #C5C3C3').css('border-width','1px') 
         .parent().children('div.description').css('color', '#333'); 
        }; 
       } 
    }) 
    } 
} 

现在奇怪的事情发生。 它正确地触发“模糊”事件。但它总是引用数组中的最后一个元素。看起来它总是使用相同的对象,并在每次循环迭代时重写它。

所以需要帮助...什么是解决方案?

+0

如果它总是只拾取最后一个元素,那么它是“正确触发模糊事件”的含义? –

+0

这是正常的,因为您给obj的最后一个值是表的最后一个值。所以当你使用它时,你会检索最后一个受影响的值。 –

回答

2

在绑定函数中上下文($ obj)赋值的问题。尝试更改为

for(var i = 0; i < fields.length; i++){ 
     if($('#user-profile-form ' + fields[i]).length > 0){ 
     var $obj = $('#user-profile-form ' + fields[i]); 
     $obj.bind({ 
      blur : function(){ 
         var $input = $(this);      

         if(!reg_chars.test($input.val())){ 
          $input.css('border','1px solid #A14') 
           .parent().children('div.description').css('color', '#A14'); 
         }else{ 
          $input.css('border-style','solid').css('border-color','#C5C3C3 #EDEDED #EDEDED #C5C3C3').css('border-width','1px') 
          .parent().children('div.description').css('color', '#333'); 
         }; 
        } 
     }) 
     } 
    } 
+0

谢谢,已经整理出... :)我的问题是我需要更多的睡眠... :))))) –