2009-12-09 50 views
1

我將一個select-element添加到DOM節點並動態填充它,這在Firefox和Safari中很適用。不幸的是,當我點擊選擇框時,它簡單不會在Internet Explorer中下拉。任何想法在這裏出了什麼問題?在IE7中添加元素

$('<select size="1">').appendTo(
      $('#mytable tbody') 
      .find('tr:last') 
      .find('th.col1') 
      ) 
      .attr('id', 'select_' + counter) 
      .append('<option>New Option</option>') 
      .click(function() { 

       var t = $(this); 

        // Get matching alternatives as json 
        $.getJSON(Drupal.settings.basePath + 'mymodule/product_cat/' + data['product_category'], function(cat_data) { 
         t.find('option').remove(); 
         $.each(cat_data, function(i,item){ 
          t.append($("<option value='" + JSON.stringify(item) + "'>" + item.name + "</option>")); 
         }); 
         t.find('option:first').attr('selected', 'selected'); 
        }); 

      }) 
      .change(function() { 
       tmparr = $(this).attr('id').split('_'); 
       set_row_data($(this).parent().parent(), $(this).val()); 
      }); 
} 

- 更新 -

我考察的選擇框包含IE7更新後的代碼 - 它通過JSON seeem得來的DOM樹正確插入選項,因此它看起來問題在別的地方。任何想法讚賞。

- UPDATE 2 -

IE7的問題似乎是在。點擊() - 功能:

如果我把一些像這樣的代碼:

$('#myelement').append('<option>foo</option>'); 

即使在IE7中也能正常工作。

如果我把它變成像這樣的點擊功能:

$('#myelement').click(function() { 
    $(this).append('<option>foo</option>'); 
}); 

出現的問題。

- 解決方案 -

什麼沒人注意到(以上所有:我),是,我的第一行是越野車:

$('<select size="1">').appendTo(... 

應該

$('<select size="1"></select>').appendTo(... 

現在工作,無論如何感謝所有人。

回答

0

在您的json中禁用緩存。有很多程序員面臨這個問題,如this one

編輯

codecouch

一種解決方法是在你的GET請求使用的緩存剋星「參數。事情是這樣的:

var urlToFetch = 'whatever?randNum=' + new Date().getTime(); 

這個作品非常好,但也有缺點,這取決於您的服務器設置。例如,如果您的應用程序服務器位於緩存層後面,那麼您不希望URL每次都會因爲冪等請求而不同,因爲緩存的版本永遠不會被使用,所以您的應用程序服務器每次都會得到直接打擊。

+0

你能詳細說明一下嗎? – schneck 2009-12-09 12:52:43

+0

感謝您的建議 - 我現在實現了兩個(建議標題和URL修改),但它不能解決問題。選擇框的內容似乎「滑落了幾個像素」,不會再點擊下拉。 – schneck 2009-12-09 13:06:38

0

我不認爲'<select size="1" id="select_' + counter + '">'是一個有效的選擇...

嘗試與'#select_'+counter

+0

這個選擇器是有效的。可以肯定的是,我將代碼更改爲$('