2010-02-09 167 views
1

我在我的表單中有3個遠程驗證,其中3個在Firefox中沒有錯誤。 第三個在IE中無法正常工作。 IE給我的錯誤 「對象犯規支持此屬性」jquery遠程驗證

這給在IE check.php錯誤:

< ?php 

$sql="select * from people where email = '".$email."'"; 
$row=mysql_query($sql,$db_connection); 
if (!$row) 
{ 
    die('Error: ' . mysql_error()); 
}  

if (mysql_num_rows($row) > 0) 
{ 
    $output = false; 
} 
else 
{ 
    $output = true; 
} 
echo json_encode($output); 

?> 

這裏是jQuery的對應:

email: {// compound rule 
         required: true, 
         email: true , 
         remote: "check.php" 
       }, 

任何想法,爲什麼它在IE中拋出一個對象錯誤。 注意firefox錯誤控制檯不顯示任何錯誤! 謝謝

回答

4

我們必須看到網頁是肯定的,但IE的「對象不支持此屬性或方法」錯誤的常見原因是,您在頁面上有一個元素,其nameid屬性包含與隱式全局變量相同的名稱。

IE6-7具有複製的引用名爲/ IDD元件的不幸非標準行爲到窗口對象的屬性:

<div id="foo">bar</div> 

alert(window.foo); // the div node 

這意味着它們與變量共享一個名稱空間:

<div id="foo">bar</div> 

var foo= 3; 
alert(window.foo); // now 3 

但是,在另一個不幸的非標準行爲中,如果你不告訴它你想要一個變量,IE就會變得困惑。它試圖指定任何新值元素節點本身,它會失敗:

<div id="foo">bar</div> 

foo= 3; // implicit global variable in other browsers. Error in IE 

當你忘記var,使一個偶然的全球性的功能也會出現這種情況:

function bof() { 
    foo= 3; // Error in IE 
} 

所以,你將需要通過腳本查找您已分配的變量,而不記得爲他們包含var聲明。這不僅僅是良好的做法(並且ECMA262-5未來的'嚴格模式'JS所要求的) - 它會阻止IE變得愚蠢並且破壞你的頁面。

順便說一句這樣的:

$sql="select * from people where email = '".$email."'"; 

是一個危險的SQL注入安全漏洞。在構建SQL查詢時,您必須使用mysql_real_escape_string()來覆蓋要插入字符串文本的任何文本。