سؤال

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

و"كائن لا يعتمد هذه الخاصية أو الأسلوب"

وشكرا للمساعدة.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>  
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>   
<script language="javascript" type="text/javascript">   
    var Test = {            
        doIt: function(str, btn) {  
            console.log(str);
            console.log(btn);               
            if (btn.hasClassName('red')) {
                console.log('has red');         
            } else {
                console.log('doesn\'t');
            }           
        }   
    };  
</script>   
<a href="#" onClick="Test.doIt('hello', this)" class="red">Test</a> 
</body></html>
هل كانت مفيدة؟

المحلول

والمشكلة هي أن BTN لا تملك hasClassName طريقة تلقائيا - وهذا امتداد النموذج.

ل تمديد العنصر الخاص بك مع وظائف تمديد النموذج أو إضافة هذا الخط في الجزء العلوي من doIt():

btn = $(btn); // Extends element with Prototype functions.

والتعليمات البرمجية الخاصة بك يجب أن تعمل من هناك.

نصائح أخرى

وذلك لأن عند استخدام النموذج، لا يتم تمديد العناصر تلقائيا مع وظائف النموذج على تحميل الصفحة في IE، لديهم على وجه التحديد لتمرير من خلال مكالمة $() لتوسيع العناصر مع هذه الأساليب. هذا إضافة إلى الجزء العلوي من وظيفة لجعلها تعمل في IE.

doIt : function(str, btn) {
    btn = $(btn);
}

تعديل: للتوضيح، في جميع المتصفحات الأخرى من IE 7 (IIRC) وأدناه عناصر HTML سيتم نموذج أولي تلقائيا، ولكن في IE <= 7 يجب أن تمر من خلال وظيفة $() أن هذه النماذج التطبيقية.

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