Помогите рефакторинг фрагмента jquery от вызова ajax - PullRequest
1 голос
/ 17 февраля 2011

Я пытаюсь изменить этот код. У меня есть этот JQuery AJAX вызова

    $.ajax({
       url: 'addMember',
       type: 'post',
       data: data,
       dataType: 'json',
       success: function(msg) {                                             
        if(msg.validate === false) {    // if there are validation errors...
                if(msg.firstName != '') {
                    $('input[name="firstName"]').parents('p').before(msg.firstName);
                    $('input[name="firstName"]').parents('p').prev('p').addClass('message error');
                    $('input[name="firstName"]').addClass('error');
                    $('input[name="firstName"]').after('<span class="check-error"></span>');
                }
                if(msg.lastName != '') {
                    $('input[name="lastName"]').parents('p').before(msg.lastName);
                    $('input[name="lastName"]').parents('p').prev('p').addClass('message error');
                    $('input[name="lastName"]').addClass('error');
                    $('input[name="lastName"]').after('<span class="check-error"></span>');
                }
                if(msg.email != '') {
                    $('input[name="email"]').parents('p').before(msg.email);
                    $('input[name="email"]').parents('p').prev('p').addClass('message error');
                    $('input[name="email"]').addClass('error');
                    $('input[name="email"]').after('<span class="check-error"></span>');
                }
         }
    .......etc

Я пытался сделать это, но это не сработало

$.each(msg, function(k, v)) {
    console.log('msg.k = '+msg.k);
});

Предложения

1 Ответ

4 голосов
/ 17 февраля 2011

Способ сделать это с помощью jQuery - связать вызовы методов и избежать повторного выбора одного и того же элемента (ов) из DOM.

Изменить это:

$('input[name="firstName"]').parents('p').before(msg.firstName);
$('input[name="firstName"]').parents('p').prev('p').addClass('message error');
$('input[name="firstName"]').addClass('error');
$('input[name="firstName"]').after('<span class="check-error"></span>');

В это:

$('input[name="firstName"]')
 .addClass('error')
 .after('<span class="check-error"></span>')
 .parents('p').before(msg.firstName)
   .prev('p').addClass('message error');

Во-вторых, похоже, что вы просто выполняете одно и то же действие три раза с тремя разными значениями.Это предполагает цикл:

if(msg.validate === false) {    // if there are validation errors...
  $(['firstName', 'lastName', 'email']).each(function (i, e) {
    if (msg[e] != '') {
      $('input[name="' + e + '"]')
       .addClass('error')
       .after('<span class="check-error"></span>')
       .parents('p').before(msg[e])
         .prev('p').addClass('message error');
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...