Pergunta

Estou usando o dojo arrastar e soltar. Quando um usuário adiciona um item a um contêiner (div dojotype = 'dojo.dnd.source'), preciso colocar esses dados em um formulário para que eu possa processá -lo posteriormente em um servidor quando o usuário enviar a página inteira. Essa parte está funcionando. Em seguida, para remover um item, permito que eles arraste/soltem um item para um contêiner "lixo". Estou tendo conceituação difícil de remover o item dos campos ocultos. Eu já tenho código de inscrição/evento para chamar as duas funções a seguir.

Você pode me informar se houver uma maneira melhor de fazer a função RemovaGealFromhiddenfields? Pode haver muitos itens "subgoéticos".

Estou prestes a começar a testar com o que tenho abaixo, mas tenho algumas dúvidas sobre isso.

Obrigado,

Neal Walters

   function addGoalToHiddenFields( goalText){
      var field = document.createElement("input");
      field.setAttribute("type","hidden");
      field.setAttribute("value",goalText);
      field.setAttribute("name","subgoal");

      //add new hidden-element to the existing form
      document.getElementById("form1").appendChild(field);
   }

   function removeGoalFromHiddenFields( goalText){

      //remove hidden field 
      nodes = document.getElementById("form1")
      for (i=0;i<nodes.length ;i++ )
           {
             var pos = nodes[i].innerHTML.IndexOf(goalText)
             if (pos > 0)
             {
                 nodes.removeChild(node[i]);

             }
           }

}

Além disso, posso fazer isso: nós = document.getElementById ("subgoeal")

Foi útil?

Solução

Estou supondo que o que você quer aqui é a funcionalidade de Dojo.Query.

Tente algo como:

dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});

Outras dicas

field.setAtAttribute ("tipo", "Hidden");

Não use o setAttribute nos documentos HTML. Existem muitos bugs nele no IE. Use as propriedades normais do DOM-HTML, que também são mais fáceis de ler:

field.type= 'hidden';

var pos = nó [i] .innerhtml.indexOf (GoalText)

Pesquisar através da marcação HTML por um valor é bobo e não funcionará quando o GoletExt contiver um personagem como '<' ou '&' que o HTML escapará.

Para o código acima, parece nodes[i] deve ser um dos <input> elementos que você anexou lá, nesse caso innerHTML Não é bom, pois ele pesquisará apenas o conteúdo da entrada, o que não é nada, pois a entrada é um elemento vazio. Em vez disso, olhe para o value Propriedade que você colocou lá:

var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
    input.parentNode.removeChild(input);

Além disso, posso fazer isso: nós = document.getElementById ("subgoeal")

Não, pois seus elementos subgois não têm IDs. Obtenha pelo nome:

var subgoals= form.getElementsByName('subgoal');

(que é o mesmo que dom-0 :)

var subgoals= form.elements.subgoal;

Ou adicione um ID a cada subgoal para ajudá -lo a recuperá -lo mais tarde:

field.id= 'id-'+goalText;

O exposto acima não funcionará, novamente, se você puder ter personagens especiais no goleiro.

Como alternativa, mantenha sua própria pesquisa em JavaScript em vez de colocar tudo no DOM:

var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top