我将一个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(...
立即行动,无论如何,谢谢大家。
答案 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)
请参阅解决方案更新