2011-11-02 2 views
0

J'essaie de créer un élément de sélection avec JS ou même d'éditer un existant mais il me semble qu'il manque quelque chose. cela est fait dans Joomla si cela est important.ne parvient pas à créer edit sélectionnez l'élément avec JS

ceci est mon code:

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); 

c'est toutes les façons j'ai essayé de faire cela. cat_chooser est un SELECT ajouté manuellement à la page.

toute aide?

EDIT: cela est tout le code:

 <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

Vous devez créer une nouvelle option à chaque boucle. Ajoutez 'option = new Option()' avant 'option.innerHTML = ..'. –

+0

qui n'a pas aidé. le problème est le choix n'a pas d'options et celui que j'essaye de créer n'est pas créé du tout. –

Répondre

1
  • JavaScript est pas Java. Vous ne pouvez pas utiliser int ou boolean pour déclarer des variables. Au lieu de cela, utilisez var.
  • JavaScript est pas PHP. Vous ne pouvez pas définir une valeur par défaut en utilisant function createDDL(pid=null)
  • La méthode .add est uniquement définie sur l'objet HTMLSelectElement.options.
  • .appendChild doit être utilisé sur document.body, pasdocument, parce que vous voulez ajouter elemetns au corps, plutôt que le document.

Code de travail, à condition que <?php .. ?> renvoie des objets JavaScript valides.

<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

ne fonctionne toujours pas. le nouvel élément select n'apparaît pas. EDIT: et l'élément cat_chooser ne se ferme pas et ne le remplit pas: o –

+0

JavaScript est sensible à la casse. '.Length' devrait être' .length'. Si vous avez besoin d'un guide JavaScript décent, jetez un oeil à https://developer.mozilla.org/fr/JavaScript/Guide –

+0

ya je suis désolé je développe dans tant de langues différentes ii se confondre lol. mais ça ne marche toujours pas ... même problème –

0

Vous devez créer un nouvel élément et l'ajouter à chaque itération. Actuellement, la totalité de la boucle for ajoute des données à la même option.

De même, dans l'instruction for loop, vous avez typé la variable i, ce que vous ne pouvez pas faire en JavaScript.

+0

comment puis-je naviguer à travers tableau? –

+0

Vous pouvez toujours utiliser la boucle for: 'pour (i = 0; i silverstrike

Questions connexes