【问题标题】:jQuery javascript variable of the if-statement is not seen in else-Statement在 else 语句中看不到 if 语句的 jQuery javascript 变量
【发布时间】:2018-05-09 04:16:42
【问题描述】:

应使用小表单来确保选择特定元素会影响其他表单字段的选择。 为了解决这个问题,我使用了 jQuery Change 函数。 使用 If-Else 语句可以提供所需的结果。 但是,如果仅在 IF 语句中声明了特殊变量“shippingLocalPickup”,则更改函数不会返回所需的结果。 (JS-FIDDLE)

<INPUT type="checkbox" id="checkboxNationalShippingService" name="checkboxNationalShippingService" value="yes" checked="checked" />
<select id="shippingServiceSel" name="shippingService">
  <option selected value='DE_Pickup'>Ware muss abgeholt werden</option>
  <option selected value='DHL_Paket'>Paket</option>
</select>
<div id="shippingLocalPickup" class="selElement" title="Diese Option sollte bei ja belassen werden">
  <p>Artikel kann abgeholt werden?
    <select name="shippingLocalPickup">
      <option selected value="DE_Pickup">ja</option>
      <option value="false">nein</option>
    </select>
  </p>

查询脚本:

  $(document).ready(function() {
    $("#shippingServiceSel")
      .change(function() {
        var shippingService = $("#shippingServiceSel").val();
        if (shippingService == "DE_Pickup") {
          var shippingLocalPickup = $("#shippingLocalPickup");
          shippingLocalPickup.empty().append('<p>Artikel kann abgeholt werden? <select name="shippingLocalPickup"><option value="false">nein</option><option value="true">ja</option></select></p>');
        } else {
          shippingLocalPickup.empty().append('<p>Artikel kann abgeholt werden? <select name="shippingLocalPickup"><option value="true">ja</option><option value="false">nein</option></select></p>');
        }
      })
  });

如果它在函数的开头声明,一切正常。 (JS-FIDDLE)

  $(document).ready(function() {
    $("#shippingServiceSel")
      .change(function() {
        var shippingLocalPickup = $("#shippingLocalPickup");
        var shippingService = $("#shippingServiceSel").val();
        if (shippingService == "DE_Pickup") {

          shippingLocalPickup.empty().append('<p>Artikel kann abgeholt werden? <select name="shippingLocalPickup"><option value="false">nein</option><option value="true">ja</option></select></p>');

        } else {
          shippingLocalPickup.empty().append('<p>Artikel kann abgeholt werden? <select name="shippingLocalPickup"><option value="true">ja</option><option value="false">nein</option></select></p>');
        }
      })
  });

在我看来,变量应该在函数中的任何地方都可见。如此处所述: (stackoverflow article)

为什么 if 语句中的可见性仍然受到限制?我的错误在哪里? 提前谢谢...


【问题讨论】:

  • shippingLocalPickup 是“可见的”,但它只在if 分支中初始化,因此它在else 分支中是undefined -> MDN: var

标签: javascript jquery variables if-statement scope


【解决方案1】:

这不是声明的可见性问题。 这是初始化的问题。

在这段代码中:

var shippingService = $("#shippingServiceSel").val();
if (shippingService == "DE_Pickup") {
  var shippingLocalPickup = $("#shippingLocalPickup");
  shippingLocalPickup.empty().append('<p>Artikel kann abgeholt werden? <select name="shippingLocalPickup"><option value="false">nein</option><option value="true">ja</option></select></p>');
} else {
  shippingLocalPickup.empty().append('<p>Artikel kann abgeholt werden? <select name="shippingLocalPickup"><option value="true">ja</option><option value="false">nein</option></select></p>');
}

shippingService 不是 "DE_Pickup", 然后将执行else 分支, 而此时shippingLocalPickup 尚未初始化, 它的值为undefined。 由于if 语句的两个分支都使用此变量, 你必须在if之前初始化它。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多