سؤال

وأنا أعمل على مشروع مكاني باستخدام كائن قابل للفرز script.aculo.us.

وكان يعمل لطيف وسريع في فايرفوكس وكروم، ولكن في IE أنه بطيء بشكل لا يصدق كلما إسقاط عنصر.

ولقد فعلت القليل من التدقيق، واتضح أنه في IE، و "onUpdate" وظيفة رد يحصل على استدعاء حوالي 8 مرات في كل مرة أنا قطرة. وعادة ما يفترض أن فقط الحصول على استدعاء مرة واحدة في حاوية للفرز (المقصد والمنشأ).

ومنذ مهمتي رد بتغيير حجم بعض العناصر وتوجه الرسوم البيانية في تلك العناصر، وحساب تشارك لكل دعوة لا بأس بها.

لا أحد يعرف ما يمكن أن يسبب هذه المشكلة في IE، أو كيفية اصلاحها؟

وتحرير: لقد لاحظت أن المشكلة لا تكمن في أنه يطلق عدة مرات عديدة عندما يتم سحبه، والمشكلة هي أن وظيفة onUpdate يحصل أطلق عندما أمر من التغييرات للفرز، حتى لو كان السحب لم تنته. ويبدو أن onUpdate تعمل في الواقع مثل رد onChange، ولكن IE فقط.

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

المحلول

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

var timer1
Sortable.create("fList", {constraint:false,onChange:function(){triggerUpdate()}})

function triggerUpdate() {
    clearTimeout(timer1)
    window.setTimeout(function(){showList()},800)
}
function showList() {
    var now = new Date()
    alert(now)

}

نصائح أخرى

وأنا لا أعرف عن script.aculo.us ولكن على تغيير حجم الأحداث، تطلق IE الأحداث بشكل مستمر، وليس فقط بعد تغيير الحجم (مثل معظم المتصفحات الأخرى تفعل)، وبالتالي أنا على التخمين بأن onUpdate وداخليا اطلاق نار يستند على شيء آخر أن يتم إطلاق (مثل تغيير حجم) عدة مرات.

وخدعة واحدة لقد استعملت لقضايا مماثلة، وعندما وقع الحدث، تعيين "العمل" تحدث بعد مهلة (على سبيل المثال 1 / 4sec) و... ولكن كل حدث جديد اطلاق النار "من تلقاء نفسه" المهلة .. . لذلك كل ما تحصل عليه هو "آخر" الحدث.

إذا كان أي شخص يعرف ما script.aculo.us واثار بالفعل على، وأنا قد تكون قادرة على توفير تفاصيل أكثر وضوحا.

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