我在表单中有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出现“对象不支持此属性或方法”错误的常见原因是页面上的元素具有name
或id
属性包含与隐式全局变量相同的名称。
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()
。