表单内触发「not a function」错误的技术问题求助
问题原因及修复方案
核心错误原因
你遇到的「not a function」错误,是因为函数名与表单内元素ID冲突:
- JavaScript中定义了
compute()函数 - 表单内有一个
<input class="add" id="compute">元素
在<form>标签范围内,浏览器会自动将表单内元素的ID作为form对象的属性,导致调用compute()时,实际取到的是这个input元素而非函数,因此触发「not a function」报错。
分步修复方案
1. 解决函数与ID冲突
将JS函数名或input的ID修改为不重复的名称,示例如下:
- 修改JS函数
compute为calculateTotal - 将input的id从
compute改为totalAmount
修改后的JS函数:
var numOne, numTwo, res, temp; function calculateTotal() { numOne = parseInt(document.getElementById("value1").value); numTwo = parseInt(document.getElementById("KAttendee").value); if(numOne && numTwo) { temp = document.getElementById("res"); temp.style.display = "block"; res = numOne * numTwo; document.getElementById("totalAmount").value = "$" + res; } }
对应的HTML输入框修改:
<p id="res"><label class="info1">TOTAL AMOUNT:</label> <input class="add" id="totalAmount"> </p>
参会人数输入框的事件绑定同步更新:
<input type="number" class="value2" id="KAttendee" oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);" maxlength="2" min='1' max='10' onclick="calculateTotal()" onkeyup="calculateTotal()" required>
2. 替换IE专属脚本语法
代码中的<script for="value2">是IE专属语法,其他浏览器无法识别,改为标准DOM事件绑定,将这段代码移到head的script标签内:
window.addEventListener('DOMContentLoaded', function() { document.getElementsByClassName('value2')[0].oninput = function () { var max = parseInt(this.max); if (parseInt(this.value) > max) { this.value = max; } } });
3. 完善预览功能
viewInput()函数未更新参会人数预览(KEG12),补充对应代码:
function viewInput() { // 原有代码保持不变 document.getElementById("KEG11").innerHTML = document.getElementById("KCompany").value; // 新增:更新参会人数预览 document.getElementById("KEG12").innerHTML = document.getElementById("KAttendee").value; // 同步计算总金额 calculateTotal(); }
4. 完善表单验证逻辑
checkforblank()函数在所有字段验证通过时无返回值,补充return true确保逻辑正常:
function checkforblank() { // 原有所有验证判断保持不变 if (document.getElementById('KAttendee').value == "") { alert('Please enter the count of ATTENDEES'); return false; } // 验证通过时返回true return true; }
5. 优化提交按钮逻辑
将VIEW按钮的type改为button避免默认提交行为,同时调整验证与预览的执行顺序:
<button class="Button1" type="button" onclick="if(checkforblank()) viewInput();">VIEW</button>
提交按钮也同步绑定验证:
<input class="Button2" type="submit" onclick="return checkforblank();">
修复后关键代码片段
<head> <title>Registration Form</title> <meta name="viewport" content="width=device-width"> <link href="C:\Users\Admin\Desktop\Registration1\galvanRegistration111.css" rel="stylesheet" type="text/css"> <script> function viewInput() { document.getElementById("KEG1").innerHTML = document.getElementById("KFname").value; document.getElementById("KEG2").innerHTML = document.getElementById("KLname").value; document.getElementById("KEG3").innerHTML = document.getElementById("KEmail").value; document.getElementById("KEG4").innerHTML = document.getElementById("KArea").value; document.getElementById("KEG5").innerHTML = document.getElementById("KPtn").value; document.getElementById("KEG6").innerHTML = document.getElementById("KAddress").value; document.getElementById("KEG7").innerHTML = document.getElementById("KCity").value; document.getElementById("KEG8").innerHTML = document.getElementById("KState").value; document.getElementById("KEG9").innerHTML = document.getElementById("KZip").value; document.getElementById("KEG10").innerHTML = document.getElementById("KCountry").value; document.getElementById("KEG11").innerHTML = document.getElementById("KCompany").value; document.getElementById("KEG12").innerHTML = document.getElementById("KAttendee").value; calculateTotal(); } var numOne, numTwo, res, temp; function calculateTotal() { numOne = parseInt(document.getElementById("value1").value); numTwo = parseInt(document.getElementById("KAttendee").value); if(numOne && numTwo) { temp = document.getElementById("res"); temp.style.display = "block"; res = numOne * numTwo; document.getElementById("totalAmount").value = "$" + res; } } function checkforblank() { if (document.getElementById('KFname').value == "") { alert('Please enter your FIRST NAME'); return false; } if (document.getElementById('KLname').value == "") { alert('Please enter your LAST NAME'); return false; } if (document.getElementById('KEmail').value == "") { alert('Please enter your EMAIL ADDRESS'); return false; } if (document.getElementById('KArea').value == "") { alert('Please enter the AREA CODE'); return false; } if (document.getElementById('KPtn').value == "") { alert('Please enter your PHONE NUMBER'); return false; } if (document.getElementById('KAddress').value == "") { alert('Please enter your ADDRESS'); return false; } if (document.getElementById('KCity').value == "") { alert('Please enter your CITY'); return false; } if (document.getElementById('KState').value == "") { alert('Please enter your STATE'); return false; } if (document.getElementById('KZip').value == "") { alert('Please enter the ZIP CODE'); return false; } if (document.getElementById('KCountry').value == "") { alert('Please enter your COUNTRY'); return false; } if (document.getElementById('KCompany').value == "") { alert('Please enter the name of the COMPANY'); return false; } if (document.getElementById('KAttendee').value == "") { alert('Please enter the count of ATTENDEES'); return false; } return true; } window.addEventListener('DOMContentLoaded', function() { document.getElementsByClassName('value2')[0].oninput = function () { var max = parseInt(this.max); if (parseInt(this.value) > max) { this.value = max; } } }); </script> </head> <body style="background-color: #ccd1d1; text-align: center"> <h1>Registration Form</h1> <form method="post" action="C:\Users\Admin\Desktop\Registration1\galvanMainPage.html" > <!-- 其他表单代码保持不变 --> <table Name="Attendee"> <tr> <td><label>Attendee Count :</label></td> <input id="value1" type="hidden" value="500"> <td class="dollar">$500 x <input type="number" class="value2" id="KAttendee" oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);" maxlength="2" min='1' max='10' onclick="calculateTotal()" onkeyup="calculateTotal()" required></td> </tr> <tr> <td><label></label></td> <td class="Max">Max 10 Attendee</td> </tr> </table> <br> <div Name="Button1"> <button class="Button1" type="button" onclick="if(checkforblank()) viewInput();">VIEW</button> </div> <br> <h1>Your Information</h1> <div name="viewform"> <!-- 其他预览代码保持不变 --> <p><label class="info1">ATTENDEE COUNT:</label> <span class="info2" id='KEG12' style="text-transform: uppercase;"></span> </p> <p id="res"><label class="info1">TOTAL AMOUNT:</label> <input class="add" id="totalAmount"> </p> </div> <br> <div Name="Button2"> <input class="Button2" type="submit" onclick="return checkforblank();"> </div> </form> </body>
内容的提问来源于stack exchange,提问作者user26815150
相关产品推荐
相关产品推荐

