1. 程式人生 > >SCRIPT65535:意外地呼叫了方法或屬性訪問

SCRIPT65535:意外地呼叫了方法或屬性訪問

本文以這個bug報錯資訊命名,來闡述下這個問題的解決辦法。

問題概述

首先說一下報錯問題來自哪裡。

這是一條指令碼的報錯資訊,是我在KISSY中遇到了,報錯模組在base.js中,這是KISSY裡的一個核心模組。當然在jQuery中也一樣會遇到,因為這是dom操作中遇到的bug。初次看到這個bug很無奈,居然是框架裡的報錯資訊不是自己寫的程式碼,完全無從下手。

其次就是什麼時候報錯。這個報錯產生在ie6、7、8中,在ie8以上沒有報錯,坑爹的ie啊,FUCK!!

解決辦法

下面直奔主題來說一下解決的辦法
先說一下為什麼會出現這個錯誤,根本原因就是在ie8以下的瀏覽器裡,操作一個DOM的非法屬性時會出現,舉例說明下

第一種情況,操作了一個DOM不該有的屬性

<input type="text" id="test">

如果要改變這個dom的值應該是修改它的value屬性

$('#test').val('hello');

但是如果寫成了

$('#test').html('hello');

在ie8以上的瀏覽器也OK,給你識別糾正了,但是在ie8以下就不行了

第二種情況,標籤的閉合上也就是我出錯的地方

<input type="text" id="test"></input>
<p>hello</p>

由於編輯器的自動補全,往往會忽略一些細節上的錯誤例如為input自動加了閉合標籤,如果只操作這個dom的值無影響,但是如果操作下個同級元素就會報錯了例如

$('#test').next().html('hello');

當debug到test的下一級標籤時,便會發現這個dom的nodeName是input而不是p,input操作html屬性是不合法的,因此就報錯啦。解決方法就是把input的閉合標籤幹掉