2012-05-18 7 views
1

У меня есть страница со ссылкой, при использовании щелчка по ссылке появится новый тег select, а затем, когда пользователь отправит форму, я хочу, чтобы пользователь выбирал опцию для каждого тега selectПараметры проверки jquery перед отправкой

вы можете перейти к последней функции JQuery, но я положил некоторые коды создания выбора тегов

HTML

<div class="container" id="addCell"> 
    <form id="acForm"method="POST" action="<?php echo URL; ?>Cell/addCell"> 
     <ul> 
      <li> 
       <p> 
        <label>Name</label> 
        <input type="text" name="name"class="longInput1"/> 
       <p> 
       <p> 
        <label>City</label> 
        <select id="countrySelector" name="city"> 
        </select> 
       </p> 
      </li> 
      <li id="intersectionCells"> 
       <p> 
        <label>Inserted cells</label> 
        <a href="#" class="smallLink" id="acaclink">new</a> 
       </p> 
      </li> 
      <li> 
       <input type="submit" class="button1" value="save"/> 
      </li> 
     </ul> 
    </form> 
</div> 

JQuery

$("#addCell").ready(function(){ 
    $("#addCell").on('click',"#acaclink",function(){ 
     var me = this; 
     var cityName = $("#countrySelector").val(); 
     $.getJSON("http://localhost/Mar7ba/Cell/getCellsInCity/"+cityName+"/TRUE",function(data){ 
      var options = ''; 
      options+="<option>Select Cell</option>"; 
      for(var i=0;i<data.length;i++){ 
       options += "<option>"+data[i]+"</option>"; 
      } 
      $(me).closest('li').append('<p>\n\ 
      <label>Select Cell</label>\n\ 
      <select name="acSelect[]">\n\ 
      '+options+'\n\ 
</select>\n\ 
<a href="#" class="removeA">delete</a>\n\ 
<span class="errorMessage"></span>\n\ 
</p>'); 
     }); 
    }); 
}); 
$("#addCell").ready(function(){ 
    $("#addCell").on('click',".removeA",function(){ 
     $(this).closest('p').remove(); 
    }); 
}); 
$("#addCell").ready(function(){ 
    $("#countrySelector").change(function(){ 
     var cityName = $("#countrySelector").val(); 
     $.getJSON("http://localhost/Mar7ba/Cell/getCellsInCity/"+cityName+"/TRUE",function(data){ 
      var options = ''; 
      options+="<option>Select Cell</option>"; 
      for(var i=0;i<data.length;i++){ 
       options += "<option>"+data[i]+"</option>"; 
      } 
      $("#intersectionCells select").html(options); 
     }); 
    }); 
}); 

и это форма проверки

$("#addCell").ready(function(){ 
    $("#acForm").on('submit',function(){ 
     var errorCount = 0; 
     $('span.errorMessage').text(''); 
     $('#intersectionCells select').each(function(){ 
      var $this = $(this); 
      if($this.val() === 'Select Cell'){ 
       var error = 'Please select a cell' ; // take the input field from label 
       $this.next('span').text(error); 
       errorCount = errorCount + 1; 
      } 
     }); 
     if(errorCount==0){ 
      $(this)[0].submit(); // submit form if no error 
     } 
    }); 
}); 

но спам не появляется, как я хочу

+0

Почему вы используете '$ ('# addCell'). Ready()'? – thecodeparadox

+0

@thecodeparadox я всегда начинаю с этого, я новичок в jquery, поэтому я всегда делаю то же самое, что и узнал –

+0

. Это неправильно? но я попытался изменить ошибку var, и он работает –

ответ

3

См: http://jsfiddle.net/ujrNu/

После этого

if(errorCount==0){ 
      $(this)[0].submit(); // submit form if no error 
     } 

следует добавить:

else{ 
    return false; 
} 

в противном случае ваша форма будет публиковались в любом случае.

Вторая проблема заключается эта линия:

$this.next('span').text(error); 

следующих возвращает следующий брат, не следующий брат, что это промежуток. Если следующий брат не является интервалом, он вернет значение null. В вашем случае следующий брат - это не span, это тег A. Таким образом, вы хотите:

$this.siblings('span :first').text(error); 
+0

, когда я делаю return false, форма не была отправлена, и это хорошо, но сообщение об ошибке не появилось (я знаю, в ur jsfiddle он появляется :() –

+0

Смотрите мое обновление выше – aquinas

+0

да, это работает, спасибо человек –

1
$("#acForm").on('submit',function (e){ 
     var errorCount = 0; 
     $('span.errorMessage').text(''); 
     $('#intersectionCells select').each(function(){ 
      var $this = $(this); 
      if($this.val() === 'Select Cell'){ 
       var error = 'Please select a cell' ; // take the input field from label 
       $this.next('span').text(error); 
       errorCount = errorCount + 1; 
      } 
     }); 
     if(errorCount==0){ 
      $(this)[0].submit(); // submit form if no error 
     } 
     e.preventDefault(); // this will stop the form submit 
    }); 

DEMO

+0

все еще отправляет страницу без проверки –

+0

@WilliamKinaan проверить мое обновление – thecodeparadox

+0

Мне пришлось изменить диапазон гнезд с помощью $ this.siblings ('span: first'). text (error); действительно благодарю вас за помощь мне –

3

вы не должны использовать ready для элементов документа, использование $(document).ready(function(){...}), и вы можете использовать preventDefault(), если у формы есть ошибки, чтобы предотвратить ее получение itted:

$("#acForm").on('submit',function (e){ 
    var errorCount = 0; 
    $('span.errorMessage').text(''); 
    $('#intersectionCells select').each(function(){ 
     var $this = $(this); 
     if ($this.val() == 'Select Cell'){ 
      var error = 'Please select a cell' ; 
      $this.next('span').text(error); 
      errorCount++; 
     } 
    }); 

    if (errorCount > 0) { 
     e.preventDefault(); 
    } 
}); 
+0

Ваш код делает форму не отправляет, если она имеет ошибку, но ошибка сообщения не появляется –

+0

@William Kinaan, так что проблема заключается в разметке, теге span, '$ this .next ('span'). text (error); 'убедитесь, что' span' добавлен в DOM перед обработкой 'submit'. – undefined

+0

Да, вы правы, с диапазоном, и я изменил его на $ this.siblings ('span: first'). Text (error); –

Смежные вопросы