我在下面提到了我的代码,我遇到了返回flase的问题;在javascript中的每个函数
$(".current_patient_medicine").each(function (i) {
var id = this.id;
var value = $("#" + id).val();
if (value.trim() == "") {
check = false;
alert("Medicine Name cannot left Blank.");
return false;
} else {
check = true;
}
});
$(".current_patient_medicine_days").each(function (i) {
var id = this.id;
var value = $("#" + id).val();
if (value.trim() == "") {
check = false;
alert("Days Field cannot left Blank.");
return false;
} else {
check = true;
}
});
这里是第一个条件警报"医学名称不能留空"显示良好但在此之后第二个警报也显示
答案 0 :(得分:2)
你在内部函数调用中有return false
,它不会停止外部函数的执行流程所以你需要
var check = true;
$(".current_patient_medicine").each(function (i) {
var value = this.value;
if (value.trim() == "") {
check = false;
alert("Medicine Name cannot left Blank.");
return false;
}
});
if (!check) {
return false;
}
$(".current_patient_medicine_days").each(function (i) {
var value = this.value;
if (value.trim() == "") {
check = false;
alert("Days Field cannot left Blank.");
return false;
}
});
if (!check) {
return false;
}
$('button').click(function() {
var check = true;
$(".current_patient_medicine").each(function(i) {
var value = this.value;
if (value.trim() == "") {
check = false;
alert("Medicine Name cannot left Blank.");
return false;
}
});
if (!check) {
return false;
}
$(".current_patient_medicine_days").each(function(i) {
var value = this.value;
if (value.trim() == "") {
check = false;
alert("Days Field cannot left Blank.");
return false;
}
});
if (!check) {
return false;
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="m1" class="current_patient_medicine" />
<input id="d1" class="current_patient_medicine_days" />
<br />
<input id="m2" class="current_patient_medicine" />
<input id="d2" class="current_patient_medicine_days" />
<br />
<button>Test</button>
答案 1 :(得分:1)
经验法则:避免在$ .each语句中返回语句
重新思考解决方案:
function logic(someArray)
{
var result = false;
$.each(someArray, function(index,item){
if(item == someValue)
{
result = true;
}
});
return result;
}
这个问题花了我一整天才发现并修复。 OMG!
希望这有助于某人。
答案 2 :(得分:0)
查看$.each()
的文档:
我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。
我稍微简化了您的代码:
var check = true;
$(".current_patient_medicine").each(function() {
// The empty string ("") is falsey, so we can remove the comparison.
// Also, no need to double-select the current element,
// instead get the val() directly:
if (! $(this).val().trim()) {
alert("Medicine Name cannot left Blank.");
check = false;
return false;
}
});
$(".current_patient_medicine_days").each(function() {
if (! $(this).val().trim()) {
alert("Days Field cannot left Blank.");
check = false;
return false;
}
});
此代码会在第一次看到空的.current_patient_medicine
值时发出警报,然后在第一次看到空的.current_patient_medicine_days
值时发出警报。