سؤال

أنا أستخدم Dojo Drag and Drop. عندما يضيف المستخدم عنصرًا إلى حاوية (div doJopee = 'dojo.dnd.source') ، فأنا بحاجة إلى الحصول على هذه البيانات في نموذج حتى أتمكن من معالجتها لاحقًا على الخادم عندما يقدم المستخدم الصفحة بأكملها. هذا الجزء يعمل. ثم لإزالة عنصر ، أسمح لهم بسحب/إسقاط عنصر إلى حاوية "سلة المهملات". أواجه تصورًا صعبًا كيفية إزالة العنصر من الحقول المخفية. لدي بالفعل رمز الاشتراك/الحدث للاتصال بالوظيفتين التاليتين.

هل يمكنك إخباري إذا كانت هناك طريقة أفضل للقيام بوظيفة RemoveGoalFromhiddenfields؟ يمكن أن يكون هناك العديد من العناصر "الفرعية".

أنا على وشك البدء في الاختبار مع ما لدي أدناه ، لكن لدي بعض الشكوك حول هذا الموضوع.

شكرًا،

نيل والترز

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

             }
           }

}

أيضًا ، هل يمكنني القيام بذلك بدلاً من ذلك: العقد = document.getElementById ("Subgoal")

هل كانت مفيدة؟

المحلول

أنا أظن ما تريده هنا هو وظيفة dojo.query.

جرب شيئًا مثل:

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

نصائح أخرى

field.setattribute ("type" ، "Hidden") ؛

لا تستخدم setAttribute على مستندات HTML. هناك العديد من الأخطاء فيه على IE. استخدم خصائص DOM-HTML العادية ، والتي من الأسهل أيضًا قراءة:

field.type= 'hidden';

var pos = node [i] .innerhtml.indexof (tordtext)

يعد البحث من خلال HTML Tarkup للحصول على قيمة سخيفًا ، ولن يعمل عندما يحتوي النص على حرف مثل "<" أو "&" الذي سوف يهرب HTML.

بالنسبة للرمز أعلاه ، يبدو الأمر nodes[i] يجب أن تكون واحدة من <input> العناصر التي قمت بإلحاقها هناك ، وفي هذه الحالة innerHTML ليس جيدًا لأنه لن يبحث فقط عن محتويات المدخلات ، وهو ما لا يمثل الإدخال عنصرًا فارغًا. بدلا من ذلك ، انظر إلى value الممتلكات التي وضعتها هناك:

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

أيضًا ، هل يمكنني القيام بذلك بدلاً من ذلك: العقد = document.getElementById ("Subgoal")

لا ، لأن عناصر دونك ليس لها معرفات. إما الحصول على الاسم:

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

(وهو نفس DOM-0 :)

var subgoals= form.elements.subgoal;

أو أضف معرفًا إلى كل فرعي لمساعدتك في استرداده لاحقًا:

field.id= 'id-'+goalText;

ما سبق لن يعمل ، مرة أخرى ، إذا كان بإمكانك الحصول على شخصيات خاصة في TOADTEXT.

بدلاً من ذلك ، احتفظ بحثيتك الخاصة في JavaScript بدلاً من وضع كل شيء في DOM:

var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top