【问题标题】:fail to create\edit select element with JS无法使用 JS 创建\编辑选择元素
【发布时间】:2011-11-02 17:58:37
【问题描述】:

我正在尝试使用 JS 创建一个选择元素,甚至编辑一个现有的元素,但我似乎遗漏了一些东西。 如果这很重要,这将在 Joomla 中完成。

这是我的代码:

 var option = document.createElement("option");
var select = document.createElement("select");
 select.setAttribute("id", "chooseCat");

for(int i=0;i<LevelNames.Length;i++)
    {
      option.innerHTML = LevelNames[i];
      option.setAttribute("value",LevelIds[i]);
      document.getElementById("cat_chooser").appendChild(option);
      document.getElementById("cat_chooser").options.add(option);
    }

select.onchange=function()
{
  CreateDDL(this.options[this.selectedIndex].value);

}

var test = document.getElementById("cat_chooser");
test.appendChild(select);
document.add(select);
document.appendChild(select);

这就是我尝试这样做的所有方法。 cat_chooser 是手动添加到页面的 SELECT。

有什么帮助吗?

编辑: 这是整个代码:

      <script language=\"javascript\" type=\"text/javascript\">


    //definitions
    var LevelNames = new Array();
    var LevelIds = new Array();
    boolean isFirstRun = true;


    //this functions create a Drop Down List 
    function CreateDDL(pid=null){

    //pass arrays for client side, henceforth : var id,var parent_it, var title
    <?php echo "\n".$id."\n".$parent_id."\n".$title."\n\n";?>
    if(pid){

    }
     if(isFirstRun)
        {
    for(int i=0; i < id.length;i++)
            {
    //if category has no parent
       if(parent_id[i] == "1")


            {
                LevelIds.push(id[i]);
                LevelNames.push(title[i]);

                }    
            }
        }
    else{
    for(int i=0; i < id.length;i++)
            {

    //if is a son of our target?
       if(parent_id[i] == pid)
            {
            LevelIds.push(id[i]);
            LevelNames.push(title[i]);

            }    
        }

}
//finished first run
isFirstRun=false;

//create the actuall drop down
//var option = document.createElement("option");
var select = document.createElement("select");
 select.setAttribute("id", "chooseCat");
for(var i=0;i<LevelNames.length;i++)
    {
       var option = new Option(/* Label */ LevelNames[i],
                              /* Value */ LevelIds[i]   );
      select.options.add(option);
    }

    select.onchange=function()
    {
      CreateDDL(this.options[this.selectedIndex].value);

    }
    var test = document.getElementById("cat_chooser");
    test.appendChild(select);
    //document.add(select);
    //document.appendChild(select);
    document.body.appendChild(select);

}
CreateDDL();
</script>

【问题讨论】:

  • 您必须在每个循环中创建一个新选项。在option.innerHTML = .. 之前添加option = new Option()
  • 那没有帮助。问题是选择没有选项,而我试图创建的那个根本没有创建。

标签: javascript select add elements options


【解决方案1】:
  • JavaScript 不是 Java。您不能使用intboolean 来声明变量。请改用var
  • JavaScript 不是 PHP。您不能使用 function createDDL(pid=null) 定义默认值
  • .add 方法仅在HTMLSelectElement.options 对象中定义。
  • .appendChild 应该在 document.body 上使用,不是 document,因为您想将元素添加到正文,而不是文档。

工作代码,前提是 &lt;?php .. ?&gt; 返回有效的 JavaScript 对象。

<script language="javascript" type="text/javascript"> //No backslashes..
//definitions
var LevelNames = new Array();
var LevelIds = new Array();
var isFirstRun = true;

//this functions create a Drop Down List 
function CreateDDL(pid) {
    if(typeof pid == "undefined") pid = null; //Default value
    //pass arrays for client side, henceforth : var id,var parent_it, var title
    <?php echo "\n".$id."\n".$parent_id."\n".$title."\n\n"; ?>
    if (pid) {

    }
    if (isFirstRun) {
        for (var i = 0; i < id.length; i++) {
            //if category has no parent
            if (parent_id[i] == "1")

            {
                LevelIds.push(id[i]);
                LevelNames.push(title[i]);

            }
        }
    } else {
        for (var i = 0; i < id.length; i++) {

            //if is a son of our target?
            if (parent_id[i] == pid) {
                LevelIds.push(id[i]);
                LevelNames.push(title[i]);

            }
        }

    }
    //finished first run
    isFirstRun = false;

    //create the actuall drop down
    //var option = document.createElement("option");
    var select = document.createElement("select");
    select.setAttribute("id", "chooseCat");
    for (var i = 0; i < LevelNames.length; i++) {
        var option = new Option(/* Label */ LevelNames[i],
                                /* Value */ LevelIds[i]);
        select.options.add(option);
    }

    select.onchange = function () {
        CreateDDL(this.options[this.selectedIndex].value);

    }
    var test = document.getElementById("cat_chooser");
    test.appendChild(select);
    //document.add(select);
    //document.appendChild(select);
    document.body.appendChild(select);

}
CreateDDL();
</script>

【讨论】:

  • 仍然无法正常工作。新的选择元素只是没有出现。编辑:并且元素 cat_chooser 确实退出了,但它仍然没有填充它:o
  • JavaScript 区分大小写。 .Length 应该是 .length。如果您需要一个不错的 JavaScript 指南,请查看 developer.mozilla.org/en/JavaScript/Guide
  • 是的,我很抱歉我用这么多不同的语言开发我弄糊涂了哈哈。但它仍然不起作用......同样的问题
  • boolean isFirstRun 替换为var isFirstRun,将function createDDL(pid=null) 替换为function createDDL(pid)。请记住:JavaScript 不是 PHP、Java 等。此外,您可以通过使用 JavaScript 错误控制台(在 Firefox/Chrome 中为 CTRL + shift + J)轻松找到这些错误。
  • 好吧,我修复了你所说的(再次感谢)并将其他 int 更改为 var 并且 ctrl shift J 没有显示任何错误...仍然没有工作哈哈
【解决方案2】:

您需要创建一个新元素并在每次迭代中附加它。目前,整个 for 循环将数据附加到同一个选项。

此外,在 for 循环语句中,您需要对 i 变量进行类型转换,而这在 JavaScript 中是无法做到的。

【讨论】:

  • 我还能如何浏览数组?
  • 您仍然可以使用 for 循环:for (i=0; i&lt;LevelNames.Length; i++)for (i in LevelNames)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2017-08-02
  • 2014-11-06
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多