2010-07-13 2 views
2

Возможно, это простое решение, поэтому я немного смущен, но JS на самом деле не моя сильная сторона, поэтому я думаю, что я спрошу.JQuery Ajax Validate Checkboxes

Я использую плагин Jquery Form, чтобы отправить группу флажков для требований к приложению планирования событий, которое я делаю.

У меня возникли проблемы с выполнением моей проверки правильности запроса на возврат, если нет ключа массива для «требования». Я знаю, что в php я мог бы просто использовать что-то вроде array_key_exists или просто проверять на isset(), но я не уверен, что cognate находится в js. код следует.

<form id="choose_reqs" method="post" action="http://www.domain.com/generator/chooseReqs/" enctype="multipart/form-data"> 
      <p>I'm planning on getting:</p> 
      <?php foreach($_SESSION['event']->opt_r as $r){?> 
       <span style="display:block; width:120px; padding:4px; border:1px #ccc solid;"><input type="checkbox" value="<?=$r;?>" name="requirement[]"/><?=$r;?></span> 
      <?php }?> 
      <input type="submit" name="event_chosen" value="Next" /> 
     </form> 

И тогда связанный JS, которая проходит после того, как формы загружается в:

function eventTypeChosen(responseText, statusText, xhr, $form) { 

    var options = { 
     target:  '#app', 
     beforeSubmit: formSubmitCheck, 
     success:  reqsChosen 
    }; 
     setNav(); 
     $('#choose_reqs').ajaxForm(options); 
    } 

    function setNav(){ 
     $('#start_over').click(start); 
    } 


    function formSubmitCheck(formData, jqForm, options){ 

     if(formData.hasOwnProperty('requirement')){ 
      alert('Please check at least one requirement'); 
      return false; 
     }else{ 

    $(jqForm).fadeOut(200); 
    return true; 
    } 
    } 

явно что-то не так с методом .hasOwnProperty() и как я использую его.

+0

Возможно, у меня может быть что-то очевидное, но где вы определяете объект 'formData'? Если вы (или плагин, который вы используете), не делаете что-то вроде 'var formData = {require: 'something'};' Я не вижу, как это будет работать? – HurnsMobile

+0

Сам плагин обрабатывает определение объекта formData и других аргументов. Формат описан здесь http://jquery.malsup.com/form/#validation - но в этом примере они используют текстовые входы, поэтому ключи определены, и они могут просто проверить, пусты ли значения. Mine - это флажки, поэтому, если ничего не проверено (это то, что я пытаюсь отказать), нет ключа для требования, и поэтому мне нужно это проверить. – DeaconDesperado

ответ

2
function formSubmitCheck(formData, jqForm, options){ 

     if($('input[name=requirement[]]').fieldValue().length==0){ 
      alert('Please check at least one requirement'); 
      return false; 
     }else{ 

    $(jqForm).fadeOut(200); 
    return true; 
    } 
    } 
+0

Спасибо davyM - отлично работает! – DeaconDesperado

+0

добро пожаловать! –

1

На странице формы плагина вы связаны в комментариях:

FormData является массив объектов, представляющих имя и значение каждого поля, которое будет отправлено на сервер ...

Попробуйте распечатать объект formData на консоли, чтобы вы могли проверить его структуру.

+0

Это произошло со мной ... при выгрузке массива каждый вход формы представляет собой многомерный массив с числовым ключом массива, под которым находятся ключи для «name» и «value». Моя проблема заключается в том, что я не вижу, как сверлить цифровые клавиши с дочерним элементом имени и проверять только, существует ли это во всем массиве (поскольку ключ отправки не важен). Я подумал о том, чтобы пройти через них и поручить ему игнорировать элемент с именем submit, но это тоже не сработало. – DeaconDesperado