إلحاق HTML التي تحتوي على جافا سكريبت لا يعمل، كيف يمكنني جعلها تعمل؟

StackOverflow https://stackoverflow.com/questions/608034

سؤال

وأنا إلحاق بعض HTML تحتوي على جافا سكريبت.

<td onclick="toggleDay('+data+',this,\'tue\');">T</td>

و

<img src="img/cross.png" onclick="deleteAlarm('+data+');">

وهذه القطع اثنين من التعليمات البرمجية هي في كمية كبيرة من HTML أنا إلحاق.

وأنها تعمل بشكل جيد إذا كانت هناك بالفعل عند تحميل الصفحة ولكن ليس عندما أنا إلحاق.

وماذا تقترح أن أفعل؟ هو في حاجة الى بعض الطلب الفرز للDOM لإعادة تفسير جافا سكريبت بعد إلحاق أو؟

وتحرير:

وفقط بعض مزيد من المعلومات، وأنا مع هذه المشكلة، لأنني إضافة بعض الاشياء مع AJAX إلى قاعدة البيانات، وعلى نجاح انا إلحاق أتش تي أم أل إلى حيث يجب أن يكون. كيندا بنفس الطريقة يفعل ذلك مع التعليقات.

وEdit2:

وحتى مع كل مناقشة حول هذا الموضوع، وذلك بفضل لإجابات، وحصلت على عمل.

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

المحلول

وكنت تفعل مثل هذا:

وسمات إضافة أولا معرف إلى HTML الخاص بك:

<td id="toggleDayCell">T</td>

<img src="img/cross.png" id="crossImg">

وبعد ذلك يكون جافا سكريبت الذي يعمل على الحدث onload من الصفحة ويعلقها على الأحداث كنت مهتما.

في PrototypeJS ، قد تبدو مثل هذا:

Event.observe(window, 'load', function(){
  if( $('toggleDayCell') ) {
    Event.observe( $('toggleDayCell'), 'click', function(event){
      //do stuff here
    }
  }

  if( $('crossImg') ) {
    Event.observe( $('crossImg'), 'click', function(event) {
       //do stuff here
    }
  }
});
<ع> استخدام شيء من هذا القبيل نموذج (أو مسج) هو لطيف لأنه يعتني عبر متصفح التوافق.

نصائح أخرى

هل إلحاق HTML عبر AJAX؟ إذا كان الأمر كذلك سيكون لديك لوحدة التقييم يدويا () جافا سكريبت أن كنت ستعود. هل يمكن أن التفاف استجابة في شعبة وتفعل شيئا مثل هذا:

wrapper.getElementsByTagName("script")
// for script in wrapper...
eval(script.innerHTML)

إذا كنت تستخدم مكتبة مثل النموذج سيكون أبسط من ذلك بكثير كما يمكنك تمرير الرد على evalScripts () طريقة.

وإلحاق HTML إلى وثيقة ثم برمجيا إضافة الحدث onclick إلى كائن.

وهذا هو من أعلى رأسي ولكن ... أعتقد أنك يمكن أن تفعل ذلك بهذه الطريقة:

وIE:

Object.onclick = someFuntion

وFF:

Object.addEventListener('click', someFunction);

وAJAX لديه بعض المراوغات ... خصوصا مع IE. مثال: لا يمكنك استخدام الخاصية innerHTML لإدراج / تحديث أي شيء في عنصر الجدول (في IE). فمن الأفضل استخدام وظائف DOM لإدراج / تحديث / حذف العقد عنصر (أو إضافة معالجات الحدث). يمكنك استخدام وظيفة حدة التقييم () المذكورة لتشغيل جافا سكريبت تحميلها بشكل حيوي بتعديل المستند باستخدام كائنات DOM.

أنت <م> يجب يكون باستخدام addEventListener('click', /*...*/) بدلا من وضع عند _ النقر في HTML داخلي أو أيا كان.

وIE يدعو addEventListener شيء آخر تماما، لذلك سيكون لديك للتعويض عن ذلك أيضا.

و(تحرير:. IE يسميها attachEvent() نأمل أن يكون هذا هو بعض الاستخدام)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top