我有一个带链接的页面,当使用时点击链接会出现一个新的选择标记,然后当用户提交表单时我想确保用户为每个选择标记选择一个选项
你可以转到最后一个jquery函数,但是我添加了一些创建select标签的代码
<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>
$("#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 :(得分:3)
您不应将ready
用于文档元素,使用$(document).ready(function(){...})
如果表单有错误,您可以使用preventDefault()
来阻止它被提交:
$("#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();
}
});
答案 1 :(得分:3)
请参阅:http://jsfiddle.net/ujrNu/
在此之后
if(errorCount==0){
$(this)[0].submit(); // submit form if no error
}
你应该添加:
else{
return false;
}
否则你的表格无论如何都会被张贴。
第二个问题是这一行:
$this.next('span').text(error);
接下来返回NEXT兄弟,而不是下一个兄弟是一个跨度。如果下一个兄弟不是跨度,它将返回null。在你的情况下,下一个兄弟不是一个跨度,它是一个A标签。所以你想要这个:
$this.siblings('span :first').text(error);
答案 2 :(得分: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 强>