jshint - как исправить мое заявление if - PullRequest
0 голосов
/ 13 ноября 2011

Этот код работает нормально ... хотя это может быть трудно читать. Однако я хочу соответствовать jshint.com и, возможно, сделать его более читабельным.

Есть так много разных способов изменить это, что я не знаю лучшего?

В основном мне нужно иметь возможность включать / выключать client_validatin. И если данные подтверждаются, я делаю ajax-вызов на сервер.

Это было похоже на хак, когда я написал это, особенно использование client_fail (т.е. использовалось для определения, прошел ли клиент проверку.

Для этого кода

function interface_signin()
  {
  var form_name='signin',
      form_elements=document.forms[form_name].elements,
      response_div='signin_response',
      client_fail=0;
  if(arc.client_validation===1)
    {
    (client_fail=1)&&check_empty(form_elements,response_div,messages.empty)&&check_item(patterns.email,form_elements[0],response_div,messages.email)&&check_item(patterns.pass,form_elements[1],response_div,messages.validate)&&(client_fail=0);
    }
    if(client_fail===0){ajax('arche_model.php',serialize(form_name)+'&a=signin',ajax_signin,response_div);}
  }

Я получаю ошибки

Line 466: (client_fail=1)&&check_empty(form_elements,response_div,messages.empty)&&check_item(patterns.email,form_elements[0],response_div,messages.email)&&check_item(patterns.pass,form_elements[1],response_div,messages.validate)&&(client_fail=0);

Ожидал присваивания или вызова функции и вместо этого увидел выражение.

Ответы [ 3 ]

1 голос
/ 13 ноября 2011

Вот как я бы это убрал:

function interface_signin() {
    var form_elements = document.forms.signin.elements,
        response_div  = 'signin_response',
        client_fail   = false;

    if(arc.client_validation === 1) {
        client_fail = check_empty(form_elements, response_div, messages.empty) &&
                      check_item(patterns.email, form_elements[0], response_div, messages.email) &&
                      check_item(patterns.pass, form_elements[1], response_div, messages.validate);
    }

    if(!client_fail) {
        ajax('arche_model.php', serialize(form_name) + '&a=signin', ajax_signin, response_div);
    }
}
0 голосов
/ 13 ноября 2011

Чтобы сделать его более читабельным, я бы изменил рабочую строку на:

client_fail = !(
       check_empty(form_elements, response_div, messages.empty)
    && check_item(patterns.email, form_elements[0], response_div, messages.email)
    && check_item(patterns.pass, form_elements[1], response_div, messages.validate));

вместо того, чтобы устанавливать флаги и сбрасывать их при успехе.и вместо проверки client_fail === 0 просто отметьте !client_fail.

0 голосов
/ 13 ноября 2011

Ваше первое и последнее условия - это задания:

(client_fail = 1)
... && (client_fail = 0)

Опять же, boss:true switch.

Пожалуйста, используйте больше пробелов.

...