0

わかりました、そのような問題がありました...私はフィールドを検証するために必要なコードの量を減らそうとしています。この場合、イベントをバインドしたい要素のIDを使用して配列を作成しました。このような:

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

そして今、奇妙なことが起こります。「ぼかし」イベントを適切にトリガーしています。ただし、常に配列の最後の要素を参照しています。常に同じオブジェクトを使用していて、ループの反復ごとに上書きしているように見えます。

だから助けが必要です...解決策は何ですか?

4

2 に答える 2

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');
                      };
                  }
        })
      }
    }
于 2012-08-30T05:17:51.153 に答える
0

JohnResigのチュートリアルLearningAdvancedJavascriptをじっくりと読むことをお勧めします。この問題を解決するのに役立ち、Javascriptをより深く理解することもできます。

于 2012-08-30T05:12:56.603 に答える