【问题标题】:jQuery - on page load select optgoup and children in second select by a default selected option in a parent selectjQuery - 在页面加载时选择 optgoup 并在第二个中选择子项,通过父项选择中的默认选择选项
【发布时间】:2013-08-12 21:59:22
【问题描述】:

我有一个选择“usercountry”,在页面加载时选择了一个预定义选项。我有第二个选择,其中包含 optgroup 国家和子选项状态。 I have a jQuery script that will change/show the optgroup and child option states accordingly when the usercountry is chosen.问题是当页面加载预选“美国”时,我需要预加载 optgroup United States。

HTML:

<select name="usercountry" id="usercountry" class="required">
        <option value="">-- Please Choose --</option>
        <option value="13">Australia</option>
        <option value="38">Canada</option>
        <option value="223" selected>United States</option>
        <option value="239">Zimbabwe</option>
</select>
<select name="userstate" id="userstate" class="required">
             <option value="" selected>Please Choose..</option>
       <optgroup label="Australia">
             <option value="New South Wales">New South Wales</option>
             <option value="Northern Territory">Northern Territory</option>
             <option value="Queensland">Queensland</option>
       </optgroup>
       <optgroup label="Canada">
             <option value="Alberta">Alberta</option>
             <option value="British Columbia">British Columbia</option>
             <option value="Manitoba">Manitoba</option>
             <option value="New Brunswick">New Brunswick</option>
       </optgroup>
       <optgroup label="United States">
             <option value="Alabama">Alabama</option>
             <option value="Alaska">Alaska</option>
             <option value="Arizona">Arizona</option>
             <option value="Arkansas">Arkansas</option>
             <option value="California">California</option>
             <option value="Colorado">Colorado</option>
             <option value="Connecticut">Connecticut</option>
       </optgroup>
       <optgroup label="Zimbabwe">
             <option value="Bulawayo">Bulawayo</option>
             <option value="Harare">Harare</option>
             <option value="Manicaland">Manicaland</option>
             <option value="Midlands">Midlands</option>
       </optgroup>
</select>

jQuery:

// sets the option group using the same code you already use for on-country-change
    function setOptGroup() {
var state_province = $('#userstate option, #userstate optgroup');
    state_province.hide();
// EDIT: this line won't retrieve selected country when page has just been loaded
//$("#userstate optgroup[label='" + $(this).find(':selected').html() + "']")
// this line works
    $("#userstate optgroup[label='" + $('#usercountry option:selected').text() + "']")
        .children()
        .andSelf()
        .show();
}

$( document ).ready(function() {
    // set up the USA option group when the page is loaded
    setOptGroup();

// your present code - refactored a bit
$('#usercountry').change(setOptGroup); // edit to fix typo
});

非常感谢任何帮助!

编辑:这是 Annabel 建议的 jsFiddle http://jsfiddle.net/goodegg/phj8q/ 编辑:上面的代码感谢 Annabel,请参阅上面的 ejsFiddle 了解最终版本

【问题讨论】:

标签: javascript jquery html optgroup


【解决方案1】:

您是否将代码放入$(document).ready() 函数中?

假设您的代码在用户选择其他国家/地区时执行您想要的操作,那么您希望将代码更改为:

// sets the option group using the same code you already use for on-country-change
function setOptGroup() {
    var state_province = $('#userstate option, #userstate optgroup');
    state_province.hide();
    // EDIT: this line won't retrieve selected country when page has just been loaded
    //$("#userstate optgroup[label='" + $(this).find(':selected').html() + "']")
    // this line works
    $("#userstate optgroup[label='" + $('#usercountry').val() + "']")
        .children()
        .andSelf()
        .show();
}

$( document ).ready(function() {
    // set up the USA option group when the page is loaded
    setOptGroup();

    // your present code - refactored a bit
    $('#usercountry').change(setOptGroup); // edit to fix typo
});

document.ready 函数将运行一次 - 当页面完成加载时。 jQuery在这里放很多代码是正常的。

【讨论】:

  • 当您更改用户国家/地区选择时,它的工作原理是在第二个选择中选择相应的 optgroup。问题是当页面第一次加载时,父选择将美国作为默认选择选项,而第二次选择为空。我希望这是有道理的。我只需要第二个选择来在页面加载时加载与父选择的预选选项匹配的 optgroup。
  • 嗨 Annabel,不,我没有在页面加载时预加载“美国”optgroup。用户状态选择为空白。我认为您的代码中还有一个错字。应该是 $('#usercountry').change(setOptGroup);而不是 $('#usercountry').change(setOptionGroup);我改了,还是不行。
  • 我没有看到错字。第一个 Select 有一个针对美国的选项,第二个 Select 有一个针对美国的 optgroup。你看过 jsFiddle 吗?
  • 是的,请查看 HTML 窗格中的 第 5 行。你有两次“Sates”。
  • 你粘贴在原始问题中的代码的第 5 行是一样的。
猜你喜欢
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
相关资源
最近更新 更多