在IE

2010-05-04 25 views
2

隱藏在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中不能使用默認值。

回答

2

選項不能被標記爲隱藏。您必須使用SelectElement.add(選項)和SelectElement.remove(索引)...

這是一個鏈接,用於按相同的順序刪除和添加選擇選項。 How can I restore the order of an (incomplete) select list to its original order?

這裏就是我做的只是做最簡單的事情 How to hide optgroup/option elements?

注意在我的崗位在嘗試捕捉一個帖子的鏈接。這在添加元素時非常有必要,特別是在將網站用於Firefox和IE時。

+0

上面的鏈接應該讓你修好。 – 2010-05-04 03:06:12

+0

我不確定我喜歡那個代碼...... DVK的代碼看起來像是一個低效率/非jQuery混亂。也刪除元素,而不是分離他們將剝離任何事件。 – mpen 2010-05-05 18:28:32

+0

某些代碼可能會清理乾淨,但至於您的評論「分離它們將剝離任何事件」。你會附加到一個選項元素上的事件。你的事件應該存在於select元素上 – 2010-05-05 19:17:43