【问题标题】:Modify select field options using Javascript使用 Javascript 修改选择字段选项
【发布时间】:2012-01-12 10:03:54
【问题描述】:

我正在尝试创建一个 Javascript 函数,该函数将从一个选择字段中获取值,然后使用它来比较 JSON 数组。如果任何数组元素与用户选择的值匹配,则该函数会将这些值添加到另一个选择字段。

逻辑:

  • 使用“onchange”HTML 属性激活函数
  • 从选择字段中获取用户选择的值
  • 将此值与 JSON 数组进行比较
  • 如果数组值 == 选定值,则追加到其他选择字段

代码:

//this function modifies a select field depending on what value was selected by its predecessor
        function tariffs()
        {   
            //variable selection equals the selected value chosen by the user in that field
            var selection = document.getElementById('tariff_net').options[document.getElementById('tariff_net').selectedIndex].value

            //for loop to go through JSON values to compare with the value chosen by the user
            for(var i = 0; i < values.preset_name.length ; i++)
                {
                    //if the JSON value equals the user selected value
                  if (values.preset_name[i] == selection)
                    {   
                        //append it to the "tariff_name" select field
                        var option = values.preset_name[i];
                        var selectfield = document.getElementById('tariff_name');
                        selectfield.appendChild(option);
                    }
                }


        }

这是显示两个选择字段的屏幕截图(顶部会影响底部选择字段选项)

http://i.imgur.com/B0eHS.png

目前我的代码无法运行,并且出现 Javascript 错误:

无法转换 JavaScript 参数 arg 0 [nsIDOMHTMLInputElement.appendChild] [打破此错误] selectfield.appendChild(option);

我也想知道如何让 Javscript 刷新所有值的选择字段,然后重新填充它。这将防止在调用函数时大量重复选项。

谢谢

【问题讨论】:

  • 你能发一个JS Fiddle demo 来展示你到目前为止的尝试吗?
  • @DavidThomas 我可以尝试,但问题是我的字段是使用 PHP 生成的,我的 JSON 也是
  • 然后尝试看看您是否可以尽可能接近地模拟静态 HTML/JS。我知道这并不理想,但如果不了解发生了什么,就很难提供帮助。而且,在没有 Ajax 的情况下重现问题时,您至少可以了解错误的来源。
  • 你的小提琴还是错的:第一个选择元素是自动关闭的,并且没有“关税名称”元素。在“选择框架”的左侧也使用“No wrap (head)”。

标签: javascript forms selection appendchild


【解决方案1】:

appendChild 接受一个元素,而不是一个字符串。选择选项有一个构造函数来帮助你:

var option = new Option(values.preset_name[i]); //Dom element instead of a string
var selectfield = document.getElementById('tariff_name');
selectfield.appendChild(option);

【讨论】:

  • 这解决了谢谢,所以我没有意识到传递给 dom 的任何东西都需要转换为对象/元素。现在有道理了!谢谢!
  • 知道如何清除选择字段吗?每次我运行这个函数?
猜你喜欢
  • 2019-01-02
  • 2017-12-13
  • 1970-01-01
  • 2012-10-22
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多