在IE7中追加元素

时间:2009-12-09 12:48:42

标签: jquery internet-explorer-7

我将一个select元素附加到DOM-Node并动态填充它,这在Firefox和Safari中很有用。不幸的是,当我点击选择框时,它很简单,不会在Internet Explorer中下载。任何想法在这里出了什么问题?

    $('<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-tree中,所以看起来问题就在其他地方。任何想法都赞赏。

- 更新2 -

IE7的问题似乎出现在.click() - 函数:

如果我放置一些这样的代码:

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

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

如果我把它放在这样的点击功能中:

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

出现问题。

- 解决方案 -

没有人注意到(最重要的是:我),我的第一行是错误的:

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

应该是

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

立即行动,无论如何,谢谢大家。

4 个答案:

答案 0 :(得分:0)

禁用json中的缓存。有许多程序员面临这个问题,例如this one

修改

来自codecouch

  

解决方法是在GET请求中使用'cache buster'参数。像这样:

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

这非常有效,但可能有缺点,具体取决于您的服务器设置。例如,如果您的应用程序服务器位于缓存层之后,您不希望每次对幂等请求的URL都不同,因为缓存版本永远不会被使用,因此您的应用程序服务器每次都会受到直接命中

答案 1 :(得分:0)

我认为'<select size="1" id="select_' + counter + '">'不是有效的选择器......

使用'#select_'+counter

进行尝试

答案 2 :(得分:0)

不知道它是否有所作为,但尝试改变:

$('<select size="1">').appendTo($('#mytable tbody')
            .find('tr:last')
            .find('th.col1')).attr('id', 'select_' + counter)

$('#mytable tbody').find('tr:last').find('th.col1')
                   .append($('<select size="1">')
                   .attr('id', 'select_' + counter);

$('#select_' + counter).append.....

..弗雷德里克

答案 3 :(得分:0)

请参阅解决方案更新