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 语句,因为这不是像 forwhile 这样的 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 不适用于功能参数 [关闭]

Nodejs异步功能不适用于每个功能[重复]

Visual Studio 自动完成功能不适用于 html 页面上的 javascript/css

ckeditor 5中的图像上传不适用于laravel 8

Axios 发布请求适用于 Postman,但不适用于浏览器(它返回“错误 401-未授权”)

错误:此功能不适用于您正在使用的数据库