JavaScript грешка “is not a function”
Винаги съм се вбесявал адски много от безполезните и объркващи съобщения за грешки. Точно днес се сблъсках с поредното.
Ето малко код относно ситуацията (JavaScript-ът далеч от съвършен):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>JavaScript грешка "is not a function"</title>
<script type="text/javascript">
function checkAll(obj)
{
var checkBoxes = document.getElementsByTagName('input');
for (i = 0; i < checkBoxes.length; i++)
{
if (obj.checked == true)
{
checkBoxes[i].checked = true;
}
else
{
checkBoxes[i].checked = false;
}
}
}
</script>
</script></head>
<body id="page">
<form name="f" method="post" action="#">
<input type="checkbox" name="checkAll" value="yes" onclick="checkAll(this)"/> <br />
<input type="checkbox" name="checkMessage1" value="1"/> <br />
<input type="checkbox" name="checkMessage2" value="2"/> <br />
<input type="checkbox" name="checkMessage3" value="3"/> <br />
</form>
</body>
</html>
Имаме 4 полета за отметка (checkbox), като първото служи за избор или за отмяна на избора на всички. Проблемът се появява, когато функцията, която трябва да извърши това при щракване на най-горното поле за отметка има същото име като някое от полетата на формуляра (стойността на атрибута name).
При това положение:
Firefox - checkAll is not a function
Internet Explorer - Object doesn’t support this property or method
Opera е доста по словоохотлива, но също толкова безполезна:
Event thread: click
Error:
name: TypeError
message: Statement on line 1: The Object does not implement [[Call]]
Backtrace:
Line 1 of script
checkAll(this);
At unknown location
[statement source code not available]
Решението е функцията, която обработва събитието onClick да се именува по друг начин, примерно selectAll
P.S. Ако някой знае как да си оцветявам HTML/CSS/JS кода в WordPress да свирка, че така не е много красIF.