我正在尝试一起使用验证和选择的插件。我在验证选择框时遇到了问题。我发现了类似的问题How can I use jQuery validation with the "chosen" plugin?和Chosen.js and validate jquery,但我找不到将解法导入我的代码的方法:
<form class='myform' id='producteditform'>
<input type='hidden' value='<? echo $row['id']; ?>' name='pkedit' id='pkedit'>
<input type='hidden' value='save' name='operation' id='operation'>
<p><label for='nameedit'>Product Name</label><em>*</em><input id='nameedit' name='nameedit' value='<? echo $row['pname']?>'/></p>
<p><label for='unitedit'>Unit</label><em>*</em><?
$query="select * from units";
$result=$mysqli->query($query);
if($result->num_rows==0)
echo "<a href='units.php?operation=insert'>No unit found. Please define a unit first</a>";
else{
echo "<select class='chosen' id='unitedit' name='unitedit'>";
while($row=$result->fetch_assoc())
echo "<option value='".$row['id']."'>".$row['name']."</option>";
echo "</select>";
}
$mysqli->close();
?></p>
<p><a class='button' class='button' id='saveedit'>Save</a>
<a class='button' id='canceledit' onclick='f()' >Cancel</a></p>
</form>
jquery代码
$("#save").click(function () {
if($("#producteditform").validate({
ignore: [],
rules: {
nameedit: {
required: true,
maxlength:100
},
unitedit:{
required: true,
}
}
}).form()
)
{
// do sth
})
}
}
html渲染输出
<form class="myform" id="productform" novalidate="novalidate">
<input type="hidden" value="insert" name="operation" id="operation">
<p><label for="name">Product Name</label><em>*</em><input type="text" name="name" id="name"></p>
<p><label for="unit">Unit</label><em>*</em><select class="chosen chzn-done" id="unit" name="unit" style="display: none;"><option value="">please choose..</option><option value="1">kgg</option></select><div id="unit_chzn" class="chzn-container chzn-container-single" style="width: 200px;" title=""><a href="javascript:void(0)" class="chzn-single" tabindex="-1"><span>please choose..</span><div><b></b></div></a><div class="chzn-drop" style="left: -9000px; width: 198px; top: 24px;"><div class="chzn-search"><input type="text" autocomplete="off" style="width: 163px;"></div><ul class="chzn-results"><li id="unit_chzn_o_0" class="active-result result-selected" style="">please choose..</li><li id="unit_chzn_o_1" class="active-result" style="">kgg</li></ul></div></div></p>
<p><a class="button" id="save">Save</a>
<a class="button" id="cancel" onclick="f()">Cancel</a></p>
</form>
当我删除class ='selected'时单击保存按钮时一切正常,否则我得到错误未捕获错误:无法验证,发现没有指定名称的元素。请参阅控制台以获取元素参
答案 0 :(得分:3)
尝试这样的事情。
$(document).ready(function() {
// initialize the plugin on DOM ready
$("#producteditform").validate({
// all rules and options,
rules: {
nameedit: {
required: true,
maxlength:100
},
unitedit:{
required: true,
}
}
});
// test for valid form
$('#save').on('click' function() {
if($("#producteditform").valid()) {
// do this on valid form
} else {
// do this on invalid form
}
});
});
form
上的 $('#producteditform').validate()
initializes the validate plugin。
$('#producteditform').valid()
programmatically triggers an actual validation test并返回true/false
布尔值。
或者,由于您的event
形式为click
submit
事件,因此您只需使用内置的submitHandler
回调函数。 (不需要创建另一个click
处理程序。)
$(document).ready(function() {
// initialize the plugin on DOM ready
$("#producteditform").validate({
// all rules and options,
rules: {
nameedit: {
required: true,
maxlength:100
},
unitedit:{
required: true,
}
},
submitHandler: function(form) {
// do this on valid form
}
});
});
完整文档:
http://docs.jquery.com/Plugins/Validation
在您显示HTML输出而不是PHP之前,以下是验证select
元素的一般示例:
<强> http://jsfiddle.net/6Dt7F/ 强>
重要的是,option
元素中的第一个或默认select
必须包含value=""
,否则required
规则将失败。
<select name="field1">
<option value="">please choose...</option>
<option>option 1</option>
<option>option 2</option>
<option>option 3</option>
</select>
修改强>:
我仍然没有足够的代码来制作可用的演示版。但是,由于chosen
插件隐藏了实际的表单元素,因此您必须执行以下操作...
1)定位要验证的实际表单元素并传递数据,而不是chosen
创建的可视元素。
2)Enable jQuery Validate to work on hidden elements设置ignore: []
选项。
试试这个......
$(document).ready(function () {
// initialize the plugin on DOM ready
$("#producteditform").validate({
// all rules and options,
ignore: [], // <-- option so that hidden elements are validated
rules: {
name: { // <-- name of actual text input
required: true,
maxlength: 100
},
unit:{ // <-- name of actual select input
required: true
}
},
submitHandler: function(form) {
// do this on valid form
}
});
});
答案 1 :(得分:2)
这是因为Chosen插入了一个输入字段,用户可以通过下拉列表搜索。
由于某种原因,此搜索字段不具有名称标记(因此错误):
<input type="text" autocomplete="off" tabindex="7">
输入也没有类或ID,这可能是控制台错误如此模糊的原因。快速解决方法是给它起一个名字:
$(".chzn-search input").attr('name', 'chzn-search');