Skip to content
You are here: خانه arrow ترفندها arrow Javascript Hacks arrow fix IE getElementById

fix IE getElementById چاپ ايميل
امتياز: / 3
ضعيفعالي 
شايد براي كمتر كسي اين عيب IE دردسر ساز بشه اما وقتي هم بشه حدس وجود اين باگ شايد كار ساده اي نباشه .
مشكل از اونجا پيش مياد كه دوباره IE هر كاري دلش خواسته كرده و استاندارد W3C رو رعايت نكرده .
بر طبق استاندارد موجود دستور getElementById() بايد المنتهايي رو برگردونه كه تنها خاصيت ID‌اونها برابر با مقدار مورد نظر باشه .
براي مثلا وقتي شما از اين دستور استفاده ميكنيد :

<script lnaguage="javascript">
var el = document.getElementById('fname');
</script>

المنتي كه ID‌اون fname هست در متغغير el قرار ميگيره .
اما مرورگر مايكروسافت براي اين كه شما بي نصيب نمونيد و يه خيري ببريد آخر سال كه هم هست دست خالي نريد نگاه ميكنه ميبينه المنتهايي كه خاصيت name اونها هم مچ بشه به عنوان جواب برميگردونه .
شايد در نگاه اول بگيد خوب اين كه خيلي هم بد نيست اما وقتي موقيعيتي كه براي من پيش اومد براي شما هم پيش بياد متوجه ميشيد كه باعث دردسر بسيار بزرگي هست  .
مشكل اين بود كه فرمي طراحي كرده بودم كه برا اساس ID المنتها تصميم گيري ميكرد و مثلا براي مقدار boolean از دو دكمه راديويي استفاده ميشد .  علاوه بر اين مقدار اون بايد براي سرور فرستاده ميشه و با نام yes و no .
اين صفحه در همه ي مرورگرها كار ميكرد اما در IE با مشكل يكي در ميون مواجه ميشد .
من كه آن زمان از وجود اين باگ اطلاع نداشتم كلي وقت صرف ديباگ كردن برنامه گذاشتم تا آخر با طرح يك مثال ساده متوجه شدم كه مشكل از 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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fix IE getElementById</title>
</head>
 
<body>
<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="text" name="txt1" id="txt1" />
  </label>
  <p>
    <label>
    <input type="text" name="txt2" />
    </label>
  </p>
  <p>
    <label>
    <input type="button" name="button" id="button" value="Button" 
    onclick="
    document.getElementById('txt1').value='the txt1 value';
    document.getElementById('txt2').value='the txt2 value';
    "/>
    </label>
  </p>
</form>
</body>
</html>
 


در صورتي شما دچار اين درد سر شديد از كد زير كه از بين برنده اين مورد غير استاندارد هست استفاده كنيد :


<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fix IE getElementById</title>
<script language="javascript">
if (/msie/i.test (navigator.userAgent)) {  // only override IE
   document.nativeGetElementById = document.getElementById;
   document.getElementById = function(id) {
      var elem = document.nativeGetElementById(id);
      if(elem) {
         // make sure that it is a valid match on id
         if(elem.attributes['id'].value == id)  {
            return elem;
         } else {
            // otherwise find the correct element
            for(var i=1;i<document.all[id].length;i++) {
               if(document.all[id][i].attributes['id'].value == id) {
                  return document.all[id][i];
               }
            }
         }
      }
    return null;
   };
}
</script>
</head>
 
<body>
<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="text" name="txt1" id="txt1" />
  </label>
  <p>
    <label>
    <input type="text" name="txt2" />
    </label>
  </p>
  <p>
    <label>
    <input type="button" name="button" id="button" value="Button" 
    onclick="
    document.getElementById('txt1').value='the txt1 value';
    document.getElementById('txt2').value='the txt2 value';
    "/>
    </label>
  </p>
</form>
</body>
</html>
 

برگزيدن اين صفحه (65) | نقل قول اين مطلب | بيننده: 1122

نظرات (3)
RSS نظرها
1. 12-03-2008 13:26
خیلی باحال بود!
مهمان
2. 06-06-2008 10:23
خیلی
خیلی عالی بود
مهمان
This e-mail address is being protected from spam bots, you need JavaScript enabled to view it
3. 06-06-2008 10:24
خیلی
cry:
مهمان
This e-mail address is being protected from spam bots, you need JavaScript enabled to view it

نوشتن نظر
نام:
ايميل:
صفحه اصلي:
عنوان:
BBCode:Web AddressEmail AddressBold TextItalic TextUnderlined TextQuoteCodeOpen ListList ItemClose List
نظر:



كد:* Code
من اين نظر را دوستانه جهت تماس ارسال ميكنم

Powered by AkoComment Tweaked Special Edition v.1.4.6
AkoComment © Copyright 2004 by Arthur Konze - www.mamboportal.com
All right reserved

 
< بعد   قبل >
 

ورود اعضا






رمز عبورتان را فراموش كرده ايد؟
هنوز ثبت نام نكرده ايد? فرم ثبت نام

خبر خوان

كاربران آنلاين در سايت

حاضرین در سایت : 2 نفر مهمان