我有一个表单,如果用户选择值为1,则提交表单,但如果他们选择2或3,则必须从具有类reason select
的select中选择一个值(有三个选择类reason select
,我刚刚展示了一个这个问题,以保持代码尽可能短)
包含在名为audit_content
<tr>
<td>
<select name="grade" class="grade" >
<option value="1">1 - Perfect</option>
<option value="2">2 - Diagnostic</option>
<option value="3">3 - Unusable</option>
</select>
</td>
</tr>
<tr>
<td>
<select name="exposure_reason" class="reason_select" >
<option value="1">Reason One</option>
<option value="2">Reason Two</option>
<option value="3">Reason Three</option>
</select>
</td>
</tr>
<tr>
<td>
<input type="button" class="delete_submit delete_from_audit" value=""
onClick="delete_image('<? echo $image_id; ?>','<? echo $audit_id; ?>')" />
<input type="button" class="reset_grade control_submit ie7_reset"
onclick="reset_image('<? echo $image_id; ?>','<? echo $audit_id; ?>')" value="" >
<input type="hidden" class="form_id" value="<? echo $i; ?>" >
<input type="button" name="audit_submit"
class="audit_submit audit_submit_btn ie7_submit" value="" />
</td>
</tr>
jquery
$(document).ready(function(){
$('#audit_content').on("click", ".audit_submit", function(){
var form_id = $(this).prev('.form_id').val();
alert(form_id);
var $form = $(this);
reasonHasVal = false;
if ($form.find('select[name="grade"]').val() != "1") {
$form.find("select.reason_select").each(function() {
if ($(this).val() != "") {
reasonHasVal = true;
$.ajax({
type: "POST",
url: "ajax/image_audit.php",
dataType: "json",
data: $('#audit_form'+form_id).serialize(),
success: function(response){
$('.audited_ok_tick'+form_id).html(response);
},
error:function (xhr, ajaxOptions, thrownError){
alert(thrownError);
}
});
return false;
}
});
if (!reasonHasVal) {
e.preventDefault();
alert("Please select a reason.");
}
}
});
});
单击提交按钮时,form_id
的警报无效,我知道ajax调用正常,因为它一直有效,直到我尝试为选择值添加验证
答案 0 :(得分:1)
我看到了几个问题:
首先,您应该在控制台中看到错误,因为您致电e.preventDefault()
但未定义e
。因此,在为click
事件注册匿名函数时,您需要添加e
:
$('#audit_content').on("click", ".audit_submit", function (e) {
其次,$form
将是对您按钮的引用,$form.find('select[name="grade"]')
将始终为空。如果您发布所有代码可能会更清楚,但我想您的意图是将每个问题单独发布并由form_id
标识?我猜测某处未显示,也许是一个公共表,form_id
值用作元素的id。在这种情况下,您将需要此代码:
var $form = $(this).parents('#' + form_id);
如果我的假设是正确的,那么其他一切都应该正常工作。如果我的假设不正确,那么你需要找到一些更好的方法来找到输入控件。一些替代方案是:
var $form = $(this).parents('table');
var $form = $(this).parent().parent().parent();