2016-01-19 6 views
1

Я пытаюсь получить форму для подтверждения на основе информации, которая была отправлена. Все работает нормально, если я делаю все поля необходимыми, но моя проверка не работает, как только я вставляю инструкцию if из требования.jquery form.validate required required

Не работает:

var form = $("#send_request_sms"); 
    form.validate({ 
     rules: { 
      first_name: { 
      required: true 
      } , 
       last_name: { 
       required: true 
      },    
         mobile: { 
       required: $('#email').val() ? false : true 
      }, 
       email: { 
        required: $('#mobile').val() ? false : true 
       } 
     }, 

    }); 

прекрасно работает:

var form = $("#send_request_sms"); 
    form.validate({ 
     rules: { 
      first_name: { 
      required: true 
      } , 
       last_name: { 
       required: true 
      },    
         mobile: { 
       required: true 
      }, 
       email: { 
        required: true 
       } 
     }, 

    }); 

Спасибо за помощь!

+0

Не могли бы вы объяснить, что вы имеете в виду под «не работает «? Что происходит и что вы хотите? –

ответ

0

Я бы порекомендовал перемещать условный оператор за пределами проверяемого объекта.

например.

var form = $("#send_request_sms"); 
var mobileRequired = $('#email').val() ? false : true; 
var emailedRequired = $('#mobile').val() ? false : true; 
form.validate({ 
    rules: { 
     first_name: { 
     required: true 
     }, 
     last_name: { 
     required: true 
     },    
     mobile: { 
     required: mobileRequired 
     }, 
     email: { 
     required: emailRequired 
     } 
    } 
}); 
+0

Нужно переключить их. OP хочет получить требуемый адрес электронной почты, если мобильный телефон не имеет значения, а мобильное устройство требуется, если адрес электронной почты не имеет значения. –

+0

Хорошая добыча! Обновление. :) –

0

Я думаю, что вы пропустили заказ по электронной почте и мобильный

var form = $("#send_request_sms"); 
form.validate({ 
    rules: { 
     first_name: { 
     required: true 
     } , 
     last_name: { 
      required: true 
     },    
     mobile: { 
      required: $('#mobile').val() ? false : true 
     }, 
     email: { 
      required: $('#email').val() ? false : true 
     } 
    }, 

}); 
+1

Нет, OP пытается сделать так, чтобы требовалось либо мобильная, либо электронная почта. Поэтому, если мобильный телефон не имеет значения, тогда требуется электронная почта, и если адрес электронной почты не имеет значения, тогда требуется мобильная связь. –

+0

Да, это имеет большее значение, как вы это сказали, но даже тогда он получит ложное отношение к мобильному телефону, даже когда он будет введен. –

+0

точно. спасибо за разъяснение, что для меня. Поэтому я попробовал вариант Джеймса, и валидация по-прежнему не так. – khtims75

2

Я вообще использовать depends и работает в моем случае

var form = $("#send_request_sms"); 
form.validate({ 
    rules: { 
     first_name: { 
     required: true 
     } , 
     last_name: { 
      required: true 
     },    
     mobile: { 
      required: {depends: function(element) { 
         return jQuery("#email").val() == '' ? true : false; 
         } 
        } 
       }, 
      email: { 
       required: {depends: function(element) { 
         return jQuery("#mobile").val() == '' ? true : false; 
         } 
        } 
      } 
    } 

}); 
+0

Да, это, кажется, подходящий способ сделать это, согласно [документации] (http://jqueryvalidation.org/validate). Причина, по которой ОП выполняла это изначально, не работала, потому что условные выражения оценивались только при первом вызове '.validate()', прямо при загрузке страницы. Оба поля пусты, когда страница загружается, поэтому оба условных выражения всегда оцениваются как 'true'. –

+0

Это сработало! Благодаря! – khtims75