استدعاء جافا سكريبت في صفحة بعد تحميلها بواسطة jQuery الحصول عليها

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

  •  19-09-2019
  •  | 
  •  

سؤال

تخيل صفحة عادية تدعو JAVScript في الرأس. المشكلة هي بعض المحتوى غير محمل حتى النقر فوق ارتباط. في وقت لاحق عندما يقوم هذا الرابط بتحميل المحتوى الذي لن يعمل عليه. هذا لأنني أعتقد أن جافا سكريبت قد تم تشغيلها بالفعل، وبالتالي لا تعلق ذلك على تلك العناصر التي تسمى لاحقا. لا يوجد سوى HTML القياسية التي يتم استدعاؤها.

لذلك على سبيل المثال، هذا هو الرمز الذي يستدعي HTML الخارجي الخاص بي.

$.get('content.inc.php', {id:id}, function(data){
        $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){
           $(this).html(data).slideDown('slow');
        });
    });

إذا كان HTML الذي كنت أتصل به على سبيل المثال، فقد كانت علامة H1 بالفعل في الصفحة ستعمل كوفون. ومع ذلك، لأنني أحمل المحتوى عبر الأسلوب أعلاه، لن يتم تغيير علامات H1 مع خطي المختار. هذا مثال فقط. نفس الشيء سوف تنطبق على أي جافا سكريبت.

كنت أتمنى ما إذا كان هناك طريقة حول هذا دون استدعاء JavaScript وكذلك HTML عند استلامها من الوظيفة أعلاه

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

المحلول

يفعل Cufon.refresh() افعل ما تريد؟

كما قلت Cufon كان مجرد مثال, ، أود أن أقترح أيضا أكثر عمومية:

$.get(url, options, function(html, status) {
    var dom = $(html);
    // call your function to manipulate the new elements and attach
    // event handlers etc:
    enhance(dom);

    // insert DOM into page and animate:
    dom.hide();
    $target_element.append(dom); // <-- append/prepend/replace whatever.
    dom.show(); // <-- replace with custom animation
});

نصائح أخرى

إذا كنت ترغب في إرفاق الأحداث بالعناصر الموجودة على الصفحة التي تم إنشاؤها بشكل حيوي، إلقاء نظرة على الكلمة الأساسية "Live".

$('H1').live("click", function() { alert('it works!'); });

آمل أن يكون هذا ما كنت تبحث عنه.

يمكنك إرفاق معالجات الأحداث بالبيانات التي تحصل عليها عبر get() داخل وظيفة رد الاتصال. علي سبيل المثال

$.get('content.inc.php', {id:id}, function(data){
    $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){        
        $(this).html(data).find('a').click(function(e) {
            // specify an event handler for <a> elements in returned data
        }).end().slideDown('slow');
    });
});

live() قد يكون أيضا خيارا لك، اعتمادا على الأحداث التي تريد ربطها (منذ ذلك الحين) live() يستخدم وفد الأحداث، ليس كل الأحداث مدعومة).

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

$.get('content.inc.php', {id:id}, function(data){
    $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){
        $(this).html(data);
        Cufon.replace('h1');
        $(this).slideDown('slow');
    });
});

لا يتم تنفيذه JavaScript بسبب سبب أمان أو Beccause JQuery هو مجرد ضبط هذا العنصر innerhtml على بعض النصوص (لا تفسر بأنه javscript) إذا كان يحتوي على. وبالتالي فإن الأمان هو التأثير بجانب.

كيف حلها؟

حاول العثور على علامات البرنامج النصي في إجابتك وتنفيذها كمرور:

var scripts = myelement.getElementsByTagName("SCRIPT");
var i = 0;

for (i = 0; i < scripts.length; i++)
   eval(scripts[i].innerHTML);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top