2011-11-02 76 views
0

我想创建一个选择元素与JS甚至编辑现有的但我似乎缺少的东西。 这是在Joomla中完成的,如果这很重要的话。无法创建编辑选择与JS的元素

这是我的代码:

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页面,添加manualy。

有帮助吗?

编辑: 这是整个代码:

 <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> 
+0

您必须在每个循环创建一个新选项。在option.innerHTML = ..'之前添加'option = new Option()'。 –

+0

没有帮助。问题是选择没有选项,我试图创建的一个并没有创建。 –

回答

1
  • JavaScript是的Java。您不能使用intboolean来声明变量。相反,使用var
  • JavaScript是不是 PHP。您无法使用function createDDL(pid=null)
  • 定义默认值.add方法仅在HTMLSelectElement.options对象处定义。
  • .appendChild应该用于document.body,而不是document,因为您要添加elemetns而不是文档。

工作代码,前提是<?php .. ?>返回有效的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> 
+0

仍然无法正常工作。新的select元素不会显示出来。编辑:和元素cat_chooser确实退出,但它并没有填充它: –

+0

JavaScript区分大小写。 '.Length'应该是'.length'。如果你需要一个体面的JavaScript指南,看看https://developer.mozilla.org/en/JavaScript/Guide –

+0

雅我很抱歉,我用这么多不同的语言开发ii弄糊涂哈哈。但仍然不起作用...同样的问题 –

0

您需要创建一个新元素并将其追加到每个迭代中。目前,整个for循环将数据追加到相同的选项。

另外,在for循环语句中,您可以键入i变量,这是您在JavaScript中无法执行的操作。

+0

我怎么能通过数组浏览? –

+0

您仍然可以使用for循环:'for(i = 0; i silverstrike