سؤال

لذلك لدي استدعاء ajax لخدمة (باستخدام JQuery) تقوم بإرجاع HTML صالح:

<table class='datagrid' style='width: 600px; text-align:left'>
<tr><th>User</th><th>Full Name</th><th>Company</th><th>New Prints</th><th>Reprints</th></tr><tr>
<td>
<a class='thickbox' href='UserSessionReportPopup.aspx?user=1&start=9/2/2009&end=9/30/2009&TB_iframe=true&height=450&width=700'>carbon</a>

</td><td>Carbon County</td>
<td></td>
<td>5</td>
<td>4</td>
</tr>
</table>

يتم تعيين HTML المرتجع بشكل صحيح ويتم عرضه على الصفحة، ولكن عندما أقوم بالنقر فوق العلامة "a"، يتم فتح صفحة جديدة بدلاً من "ThickBox" تحتوي على محتوى iFrame.

هذا هو الجزء المربك إذا قمت بنسخ هذا الرمز في الصفحة ثم قمت بتشغيله في المتصفح وهو يعمل بالطريقة الصحيحة (عرض عنصر المربع السميك)

لماذا لا تعرض استجابة AJAX عنصر سميكة بشكل صحيح؟

أعتقد أن الفئة = "مربع سميك" في نص الاستجابة لا تجد جافا سكريبت الذي يعرف كيفية تحليل هذا العنصر.

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

المحلول

أعتقد أن المشكلة هي أن هذا <a class='thickbox' فقط لا يرتبط الحدث به.

لقد واجهت نفس المشكلات تمامًا، عندما قمت بنسخ عناصر dom الموجودة والتي تحتوي على روابط وتوقفت جميع الأحداث المرتبطة عن العمل على تلك العناصر المنشأة حديثًا.كل ما كان علي فعله هو ربط الأحداث بتلك العناصر أيضًا.

لذلك فقط قم بإجراء اتصال سميك بهذا العنصر الجديد أيضًا.لا تستخدم فقط نفس الرمز الذي تستخدمه في $(document).ready.عندما فعلت شيئًا كهذا، بدأت الأحداث تعمل على عناصر جديدة، لكنها أطلقت مرتين على العناصر القديمة.

تحرير ردا على التعليق:ليس لدي أي فكرة عن كيفية عمل صندوق سميك.لقد فضلت دائمًا Slimbox.لقد وجدت بعض الأمثلة التي يمكن أن تساعدك.اقرأ هذا (يتعلق بالصندوق السميك):http://15daysofjquery.com/jquery-lightbox/19/

بشكل أساسي، عند تحميل الصفحة، يتم تشغيل هذه الوظيفة:

function TB_init(){

    $("a.thickbox").click(function(){

    var t = this.title || this.innerHTML || this.href;

    TB_show(t,this.href);

    this.blur();

    return false;

    });

الآن ستفتح جميع العلامات ذات الصندوق السميك للفئة نقاط ارتباط الأشياء في نافذة الصندوق السميك.إذا تمت إضافة عناصر جديدة إلى الصفحة، فلن يكون هذا الحدث مرتبطًا بها، لذلك بعد القيام بسحر أجاكس وسحب هذا المحتوى الجديد من مكان ما، تحتاج إلى ربط ذلك $("a.thickbox").انقر (function(){ إلى الرابط الجديد لـ.لذلك فقط أضف شيئًا مثل

$(newlinkselector).click(function{ etc.. etc.. 

في البرنامج النصي، مباشرةً بعد المكان الذي تعرض فيه الأشياء التي يعيدها إليك استدعاء ajax.

نصائح أخرى

ويمكنك أيضا وضع التالية النصي ضمن استجابة اياكس:

<script type="text/javascript">
    self.parent.tb_init('a.thickbox, area.thickbox, input.thickbox');
</script>

ووسوف تهيئة خانة سميكة في كل مرة عندما رد اياكس الخروج.

وكان لي نفس المشكلة. الجواب السريع - أضف السطر التالي بعد ملء HTML داخلي: tb_init ( 'a.thickbox')؛ // التهيئة مرة أخرى

وهذا re-تهيئة معالج الحدث للعلامة مرساة. عملت مثل سحر بالنسبة لي ...

واستبدال tb_init () مع التالية:

   function tb_init(domChunk){
    $(domChunk).live("click", function(){
    var t = this.title || this.name || null;
    var a = this.href || this.alt;
    var g = this.rel || false;
    tb_show(t,a,g);
    this.blur();
    return false;
    });
}

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

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