我在表单中有3个远程验证,其中3个在Firefox控制台中没有错误。
第三者在IE中无法正常工作。
IE给我错误“对象不支持此属性”

这在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错误控制台不会显示任何错误!
谢谢

最佳答案

我们必须确定页面是否正确,但是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()

10-05 20:40
查看更多