2015-03-06 1 views
0

Я пытаюсь сделать два условных оператора с jQuery следующим образом.В jQuery моя функция не работает

$('#user_name, #user_email, #user_password').keyup(function() { 
    if ($('#output-name').is('.field-output-comple') && 
      $('#output-email').is('.field-output-comple') && 
      $('#output-password').is('.field-output-comple') && 
      $('#confirm-terms-of-use').is(':checked') 
    ) { 
     $('#register-button').removeAttr('disabled'); 
    } else { 
     $('#register-button').attr('disabled', 'disabled'); 
    } 
}); 

$('#confirm-terms-of-use').change(function() { 
    if ($('#output-name').is('.field-output-comple') && 
      $('#output-email').is('.field-output-comple') && 
      $('#output-password').is('.field-output-comple') && 
      $('#confirm-terms-of-use').is(':checked') 
    ) { 
     $('#register-button').removeAttr('disabled'); 
    } else { 
     $('#register-button').attr('disabled', 'disabled'); 
    } 
}); 

Но вы знаете, что этот код дублируется.

if ($('#output-name').is('.field-output-comple') && 
    $('#output-email').is('.field-output-comple') && 
    $('#output-password').is('.field-output-comple') && 
    $('#confirm-terms-of-use').is(':checked') 
) { 
    $('#register-button').removeAttr('disabled'); 
} else { 
    $('#register-button').attr('disabled', 'disabled'); 
} 

Таким образом, я делаю этот код с такой функцией.

$('#user_name, #user_email, #user_password').keyup(isValidPassword()) 
$('#confirm-terms-of-use').change(isValidPassword()) 

function isValidPassword() { 
    if ($('#output-name').is('.field-output-comple') && 
      $('#output-email').is('.field-output-comple') && 
      $('#output-password').is('.field-output-comple') && 
      $('#confirm-terms-of-use').is(':checked') 
    ) { 
     $('#register-button').removeAttr('disabled'); 
    } else { 
     $('#register-button').attr('disabled', 'disabled'); 
    } 
} 

Но это не сработало. Нет ошибки, но isValidPassword доза не выводит ничего, может быть. Где я совершил ошибку? Спасибо за чтение.

+0

Пожалуйста [править] Ваш вопрос, чтобы объяснить, что вы имеете в виду под «не работал», в частности. Спасибо за улучшение ссылочного значения вопроса и привлечение его к ответственности! –

ответ

3

Это не делает то, что вы думаете:

.keyup(isValidPassword()) 

Это не проходит сам isValidPassword функцию keyup, она выполняет функцию и передает результат этой функции , И эта функция ничего не возвращает, поэтому ее результат равен undefined.

Не выполнять функцию, просто передать саму функцию в качестве переменной:

.keyup(isValidPassword) 
4

Вам необходимо передать ссылку на функцию обработчикам событий, вы вызываете функцию isValidPassword и передаете ее возвращаемое значение undefined в качестве обработчика события.

$('#user_name, #user_email, #user_password').keyup(isValidPassword) 
$('#confirm-terms-of-use').change(isValidPassword) 
Смежные вопросы