隱藏在IE
$.fn.cascade = function() {
var opts = this.children('option');
var rel = this.attr('rel');
$('[name='+rel+']').change(function() {
var val = $(this).val();
var disp = opts.filter('[rel='+val+']');
opts.filter(':visible').hide();
disp.show();
if(!disp.filter(':selected').length) {
disp.filter(':first').attr('selected','selected');
}
}).trigger('change');
return this;
}
它着眼於rel
財產,如果rel
變化顯示,那麼它元素過濾器列表僅顯示有例如該值...的選項,它可以在HTML,看起來像這樣:
<select id="id-pickup_address-country" name="pickup_address-country">
<option selected="selected" value="CA">Canada
</option>
<option value="US">United States
</option>
</select>
<select id="id-pickup_address-province" rel="pickup_address-country" name="pickup_address-province">
<option rel="CA" value="AB">Alberta
</option>
<option selected="selected" rel="CA" value="BC">British Columbia
</option>
<option rel="CA" value="MB">Manitoba
</option>...
</select>
不過,我只是發現它不能在IE瀏覽器正常工作(當然, !)這似乎不允許你嗨de options
。我該如何解決這個問題?
這就是我現在得到:
(function($) {
$.fn.cascade = function() {
var filteredSelect = $(this);
var filteredOpts = this.children('option');
var triggerSelect = $('[name='+this.attr('rel')+']');
triggerSelect.change(function() {
var triggerValue = $(this).val();
filteredOpts.detach()
.filter('[rel='+triggerValue+']').appendTo(filteredSelect)
.filter(':first').attr('selected','selected');
}).trigger('change');
return this;
}
})(jQuery);
這確實在IE工作,但仍然有兩個問題。 .filter(':first').attr('selected','selected');
位似乎沒有在IE中做任何事情(它應該選擇第一個可見元素)。由於我一直在使用appendTo
,它現在默認爲最後一個。另一個問題是,因爲我立即分離所有元素,所以在HTML中不能使用默認值。
上面的鏈接應該讓你修好。 – 2010-05-04 03:06:12
我不確定我喜歡那個代碼...... DVK的代碼看起來像是一個低效率/非jQuery混亂。也刪除元素,而不是分離他們將剝離任何事件。 – mpen 2010-05-05 18:28:32
某些代碼可能會清理乾淨,但至於您的評論「分離它們將剝離任何事件」。你會附加到一個選項元素上的事件。你的事件應該存在於select元素上 – 2010-05-05 19:17:43