javascript返回错误;不适用于每个功能
Posted
技术标签:
【中文标题】javascript返回错误;不适用于每个功能【英文标题】:javascript return false; is not working on each function 【发布时间】:2015-04-17 20:18:25 【问题描述】:我在下面提到了我的代码,我有返回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;
);
这里第一个条件警报“药物名称不能留空”显示良好,但之后第二个警报也显示
【问题讨论】:
如果您不想制作其他循环,请使用break
而不是 return false
。
Nitpick:您的代码缩进使其难以阅读。看看Javascript style guide
break 必须在循环或开关内,所以会抛出 javascrip 错误
@panther:你不能在这里使用 break 语句,因为这不是像 for
或 while
这样的 Javascript 循环结构。 jQuery 中的.each
是一个高阶函数; break
在此上下文中是非法声明:cl.ly/image/0M3C1o0P280T/…
工作正常 - jsfiddle.net/arunpjohny/gnf7ath2/1
【参考方案1】:
您在内部函数调用中有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>
【讨论】:
【参考方案2】:经验法则:避免在 $.each 语句中使用 return 语句
重新考虑解决方案:
function logic(someArray)
var result = false;
$.each(someArray, function(index,item)
if(item == someValue)
result = true;
);
return result;
这个问题花了我一整天的时间来发现和解决。天哪!
希望这对某人有所帮助。
【讨论】:
这么多答案告诉在哪里放置正确的返回错误语句。但是没有任何效果,因为问题是逻辑而不是实现。这拯救了我的一天。谢谢。【参考方案3】:查看$.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
值时发出警报。
【讨论】:
以上是关于javascript返回错误;不适用于每个功能的主要内容,如果未能解决你的问题,请参考以下文章
Javascript Intellisense 不适用于功能参数 [关闭]
Visual Studio 自动完成功能不适用于 html 页面上的 javascript/css