隐藏选择选项值,以便用户无法查看

时间:2013-09-06 20:14:25

标签: javascript jquery html5

所以我正在创建一个下拉列表。我从3个一般位置的数据库中检索数据。国家,地区/州/普罗维登斯和城市。所以我有3个下降(每个一般位置一个)。选择国家/地区时,我只希望该国家/地区内的地区成为选项。我将所有区域放在select标签中,因为我不知道用户将选择哪个国家/地区,我正在尝试避免使用PHP进行AJAX调用。

我当前的HTML:

<select id='countrySelect'>
  <option value='0'>Select Country</option>
  <option value='1'>United States</option>
  <option value='2'>Canada</option>
</select>
<select id='regionSelect' disabled>
  <option value='0'>Select Region/State</option>
  <option value='1' data-id='1'>California</option>
  <option value='2' data-id='2'>British Columbia</option>
</select>
<select id='citySelect' disabled>
  <option value='0'>Select City/Area</option>
  <option value='1' data-id='1'>San Fransisco</option>
  <option value='2' data-id='1'>Los Angeles</option>
  <option value='3' data-id='2'>Victoria</option>
  <option value='4' data-id='2'>Vancouver</option>
</select>

该值对应于数据库中该位置的想法(国家,地区和城市都是他们自己的数据库)。 Data-id指的是该选项所在位置的id。例如:加利福尼亚州的数据ID为1表示它位于国家1中。而美国的值为1,因此加利福尼亚州位于美国。它对地区的城市也是如此。但是,当用户单击“统一状态”时。我希望不能看到不列颠哥伦比亚省(不是残疾人,因为当他们被禁用时,他们仍然可见,只是不可选择。我不希望他们被删除因为他们永远消失了)。我想用一种跨浏览器方式隐藏它们,如果他们选择加拿大,那么其他一切都将被“隐藏”给用户。到目前为止,我只为国家和地区做过。这座城市还没有成功,因为我想先把它搞清楚。

我目前的jQuery:

 $('#countrySelect').on('change', function() {
  // set the country ID equal to the selected value
  var countryId = this.value;
  // enable all regions to be selected
  $("#regionSelect > option").prop('disabled', false);
  // loop through to disable regions that cannot be selected
  $("#regionSelect > option").each(function() {
        if($(this).data('id')!= countryId && $(this).val() != 0) {
            $(this).hide():
        }
    });
  // if a country was selected allow the user to select a region
  if(countryId > 0){
    $('#regionSelect').prop('disabled',false);
  }
  else {
    $('#regionSelect').prop('disabled',true);               
    $("#regionSelect").val('0');
  }           
});     

2 个答案:

答案 0 :(得分:1)

主要关键点是data('id') - 您正试图获得.prop('data-id')

我会做这样的事情

$("#regionSelect > option[data-id!=" + countryId + "]").hide();

FIDDLE:http://jsfiddle.net/rxHLq/

删除了冗余代码的新FIDDLE:http://jsfiddle.net/rxHLq/1/

再次更新:http://jsfiddle.net/rxHLq/4/(Eagle的答案通过显示隐藏元素添加到我的示例中,以防更改选项)

答案 1 :(得分:1)

您可以在此处根据data-id

显示与某个国家/地区相关联的所有区域
$('#countrySelect').change(function()
{
    $('#regionSelect').prop('disabled',$(this).val() == "0");
    $('#regionSelect option[data-id='+$(this).val()+']').show();
    $('#regionSelect option[data-id!='+$(this).val()+']').hide();
});

http://jsfiddle.net/TmEbd/