【问题标题】:jQuery: Cannot select val='' from generated dropdown listjQuery:无法从生成的下拉列表中选择 val=''
【发布时间】:2023-03-03 03:04:01
【问题描述】:

我有以下 JS 用于生成省/州的下拉列表:

var populateList = function (list, element) {
    element.append("<option val=''>Select...</option>")
    list.forEach(function (val) {
        element.append("<option val=" + val[0] + ">" + val[1] + "</option>");
    })
}

var canProvinces = [
    ['ON', 'Ontario'],
    ['QC', 'Quebec'],
    ['NS', 'Nova Scotia'],
    ['NB', 'New Brunswick'],
    ['MB', 'Manitoba'],
    ['BC', 'British Columbia'],
    ['PE', 'Prince Edward Island'],
    ['SK', 'Saskatchewan'],
    ['AB', 'Alberta'],
    ['NL', 'Newfoundland and Labrador'],
    ['NT', 'Northwest Territories'],
    ['YT', 'Yukon'],
    ['NU', 'Nunavut']];

我正在努力的想法是,当用户在表单中切换国家/地区时,系统可以在用户切换国家/地区时使用populateList() 切换到新列表。然后我使用 jQuery 将省份缩写放在一个隐藏的输入字段中。这是表单中的代码:

<script src="list-of-provices/states-from-above.js"></script>

<input id="UserCountry" value="CA" type="text" /> <!-- to be converted to dropdown when issue resolves -->

<select id="province-select" name="province-select"></select>

<input id="Province" type="hidden"/>

<script>
$(document).ready(function () {

   if ($('#UserCountry').val() == 'CA') {
            populateList(canProvinces, $("#province-select"));
        } else if ($('#UserCountry').val() == 'US') {
            populateList(usaStates, $("#province-select"));
        }

    $('#province-select').bind('input propertychange', function () {

           //something wrong here? Returns full name, not 2 letter abbreviation.
           console.log($("#province-select").val())

           $('#Province').val($("#province-select").val())
        })
});
</script>

我还没有进入国家切换部分,因为尽管我已经尝试了一切,$("#province-select").val() 从下拉列表中返回文本,而不是值。我一直无法找到原因。下面是代码生成的 HTML:

<select id="province-select" name="province-select">
   <option val="">Select...</option>
   <option val="ON">Ontario</option>
   <option val="QC">Quebec</option>
   <option val="NS">Nova Scotia</option>
   <option val="NB">New Brunswick</option>
   <option val="MB">Manitoba</option>
   <option val="BC">British Columbia</option>
   <option val="PE">Prince Edward Island</option>
   <option val="SK">Saskatchewan</option>
   <option val="AB">Alberta</option>
   <option val="NL">Newfoundland and Labrador</option>
   <option val="NT">Northwest Territories</option>
   <option val="YT">Yukon</option>
   <option val="NU">Nunavut</option>
</select>

我有什么遗漏吗? $("#province-select").val() 应该从下拉列表中返回 val="",但对我来说它返回文本。

有什么想法吗?

【问题讨论】:

  • .bind() 已弃用,您应该使用.on()
  • 请发帖minimal reproducible example。您可以使用Stack Snippet 使其可执行。
  • 请详细点?我的印象是 .on() / .bind() 是事件监听器。
  • 错字:val= 应该是value=
  • 是的。但是if ($('#UserCountry').val() == 'CA')不在.bind()

标签: javascript jquery


【解决方案1】:

您的代码中有一个小错误。用于设置选项值的属性是value 而不是val。替换你的

element.append("<option val=" + val[0] + ">" + val[1] + "</option>");

element.append("<option value='" + val[0] + "'>" + val[1] + "</option>");

你很好。

【讨论】:

  • 不要为简单的拼写错误发布真正的答案。只需投票关闭。
  • 另外,值需要用单引号 (') 或双引号 (") 括起来,因为值似乎是 string
  • @Barmar 当然,但我不认为这是一个错字。不知何故,OP 确信 val 是要使用的正确属性。可能,jQuery 是原因。另外,我在发布我的答案后看到了您的评论,否则我不会回答
  • @Karan - 感谢您指出这一点。我已经编辑了答案,尽管我认为只要值中没有空格就可以正常工作。
  • 这仍然是一个小错误,没有其他人会犯这个错误。这个问题对后代没有任何意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2016-10-13
  • 2016-04-14
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 2018-07-22
相关资源
最近更新 更多