【问题标题】:Simple if statment not working简单的 if 语句不起作用
【发布时间】:2016-08-10 12:55:24
【问题描述】:

我有这个简单的代码,它应该可以工作,但它不工作。 if 语句似乎永远不会是真的。

JS:

$(document).ready(function(e) {
  var country = "United States";

  $.each($('select[name="country"]').children('option'), function(){
    if($(this).text() == country){
      alert("found");
    }else{
      console.log("Not found");
    }

  });

});

HTML:

<select name="country"  value="" >
  <option value="0" >Afghanistan </option>
  <option value="1" >Albania </option>
  <option value="2" >Algeria </option>
  <option value="3" >American Samoa </option>
  .
  .
  .
  .

我在控制台中没有收到任何错误。

JsFiddle

【问题讨论】:

  • 删除选项中文本后的空格
  • 问题在于空格,但通常的方法是比较数字 ID,而不是可以不同的文本(波浪号、大写字母、空格等)。所以这里的所有答案都很好,但你的代码仍然会不一致并且有危险的错误

标签: javascript jquery


【解决方案1】:

问题是您的选项值有一个尾随空格" ",因此它们与您的country(没有尾随空格)不匹配。

"United States" != "United States "

注意:您可以通过添加断点并检查这两个值来轻松调试。


可能的解决方案:

  1. 在比较之前修剪 text() 结果(推荐
  2. 从 HTML 中删除空格(我也会这样做)
  3. country 值添加一个额外的空格(废话……但确实有效)

推荐解决方案

if($(this).text().trim() == country){
    alert("found");
}

您可能需要检查browser compatibility 中的trim() 函数,以确保它符合您的要求。如果没有,那么您可能会发现 this post 感兴趣。

【讨论】:

  • 不错的收获!我将修剪这两个论点,因为某些国家/地区包含空格,例如('UnitedStates' != 'United States')
  • @user3284463: trim 只会删除前导和尾随空格,不会删除单词之间的任何空格。虽然取决于您真正从哪里获得country,但无论如何都修剪它们可能是有意义的
【解决方案2】:

在 if 条件中使用 trim 函数

if($.trim($(this).text()) == country)

【讨论】:

  • 谢谢!。我最终修剪了两个值if($.trim($(this).text()) == $.trim(country))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多