2009-12-09 51 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

这个选择器是有效的。可以肯定的是,我将代码更改为$('