Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选择框动态添加选项在firefox3.6中不起作用_Javascript_Html - Fatal编程技术网

Javascript 选择框动态添加选项在firefox3.6中不起作用

Javascript 选择框动态添加选项在firefox3.6中不起作用,javascript,html,Javascript,Html,下面是动态填充选择框的代码。这在除Firefox3.6之外的所有浏览器中都能正常工作 var option25 = document.createElement("option"); option25.text = '25 miles'; option25.value = 25; if(rad == '25') { option25.selected = 'selected'; } var combo = document.getElementById('ddlProximity_' +

下面是动态填充选择框的代码。这在除Firefox3.6之外的所有浏览器中都能正常工作

var option25 = document.createElement("option");
option25.text = '25 miles';
option25.value = 25;
if(rad == '25')
{
    option25.selected = 'selected';
}
var combo = document.getElementById('ddlProximity_' + controlId);
combo.add(option25); //not working in FF3.6

任何建议

假设combo是一个选择菜单,请参见此示例


如果您希望确保JS代码能够跨多种浏览器工作,我将使用诸如jQuery之类的JavaScript框架来执行DOM操作。JS框架已经解决了大多数跨浏览器问题,并抽象了它们的处理,因此您不必担心编写代码来解决特定浏览器中的问题。以下是jQuery的站点:

现在,要完成您的示例在jQuery中所说的,您需要执行以下操作:

var option25 = $('<option>').val(25).text('25 miles');
if (rad == '25') {
    option25.attr('selected', 'selected');
}

var combo = $('#ddlProximity_' + controlId);
combo.append(option25); // Will work in all browsers supported by jQuery
var option25=$('').val(25).text('25英里');
如果(rad='25'){
选项25.attr(“选定”、“选定”);
}
var combo=$('#ddl'+controlId);
组合。追加(选项25);//将在jQuery支持的所有浏览器中工作

如果您真的想在没有任何JS框架的情况下实现这一点,我将在这里查看:。add方法应该可以工作,但是在8之前的IE版本中有一些警告,并且您的页面必须有正确的DOCTYPE声明。您也可以尝试appendChild,但我会在一些浏览器中测试它,看看它是否满足您的需要。

select元素上的
add
方法在Gecko 7()以上的版本中使用两个参数

在IE中,它只需要一个参数,如果是IE8标准模式下的IE8,则需要两个参数,或者其他参数

如果我们在调用
add
之前使用krg的代码并检查算术数,那么它可以在Firefox 3.6.28、Firefox 15.0.1和IE 9中使用:

if (typeof combo.add === 'function') {
    if (combo.add.arity === 1) {
        combo.add(option25);
    } else {
        combo.add(option25, null);
    }
} else if (typeof combo.appendChild === 'function') {
    combo.appendChild(option25);
}

我不相信你尝试过所有现存的网络浏览器。Firefox 3.6出了什么问题?它在IE、FF 15、Chrome中运行良好。。我知道我支持什么浏览器…这看起来和OP发布的代码完全一样。@RoddyofFrozenpeas,不,这使用appendChild,应该可以工作,但在IE中可能没有。如果select.add不可用,链接已更新为回退使用appendChild。@krg fiddle的if-else部分在FF3.6中不起作用,但在combo.appendChild(选项25)中起作用;此代码适用于FF3.6,但不适用于IEif($.browser.safari)&&($.browser.version='3.6')){759我正在使用上面的代码来区分不同的浏览器。它现在运行良好。感谢类似于这张罚单是针对jQuery 1.2的。这在jQuery 1.8中仍然是一个问题吗?我不确定。它说他们不会修复它,所以我认为这意味着它没有修复。@DaniF谢谢你的建议。这段代码是由其他人完成的,我正在修复这个问题。那个人在整个页面中使用了Javascript,现在改成JQuery已经太晚了。但是我喜欢用JQuery。。。
if (typeof combo.add === 'function') {
    if (combo.add.arity === 1) {
        combo.add(option25);
    } else {
        combo.add(option25, null);
    }
} else if (typeof combo.appendChild === 'function') {
    combo.appendChild(option25);
}