JS: Uncaught TypeError: объект не является функцией (onclick)
Изменить: Здесь JSfiddle
Edit2: Ошибка в этой строке: <input type="button" value="totalbandwidthresult" onclick="javascript:totalbandwidth();">
Попытка заставить кнопку выполнить расчет. Необходимые переменные ниже, а также HTML, где
Я получаю сообщение об ошибке: Uncaught TypeError: object is not a function index.html:71
onclick
Вот мой Javascript
function totalbandwidth() {
var fps=Number(document.calculator.fps.value);
var bitrate=Number(document.calculator.bitrate.value);
var numberofcameras = Number(document.calculator.numberofcameras.value);
var encoding = document.calculator.encoding.value;
if (encoding = "mjpeg")
{
storage = bitrate*fps;
}
else
{
storage = bitrate;
}
totalbandwidth = (numberofcameras * storage) / 1000;
document.calculator.totalbandwidthresult.value = totalbandwidth;
}
HTML:
<form name="calculator" class="formtable">
<div class="formrow"><label for="rcname">RC Name</label> <input type="text" name="rcname"></div>
<div class="formrow"><label for="fps">FPS</label> <input type="text" name="fps"> </div>
<div class="formrow"><label for="bitrate">Bitrate</label> <input type="text" name="bitrate"> </div>
<div class="formrow"><label for="numberofcameras">Number of Cameras</label> <input type="text" name="numberofcameras"> </div>
<div class="formrow"><label for="encoding">Encoding</label> <select name="encoding" id="encodingoptions">
<option value="h264">H.264</option>
<option value="mjpeg">MJPEG</option>
<option value="mpeg4">MPEG4</option>
</select></div>
Total Storage: <input type="text" name="totalstorage">
Total Bandwidth: <input type="text" name="totalbandwidth">
<input type="button" value="totalbandwidthresult" onclick="javascript:totalbandwidth();">
В принципе - кажется, что может быть что-то не так с синтаксисом, который я использовал в JS, но я не уверен.
Ответы
Ответ 1
Измените только имя функции; никаких других изменений не требуется
<script>
function totalbandwidthresult() {
alert("fdf");
var fps = Number(document.calculator.fps.value);
var bitrate = Number(document.calculator.bitrate.value);
var numberofcameras = Number(document.calculator.numberofcameras.value);
var encoding = document.calculator.encoding.value;
if (encoding = "mjpeg") {
storage = bitrate * fps;
} else {
storage = bitrate;
}
totalbandwidth = (numberofcameras * storage) / 1000;
alert(totalbandwidth);
document.calculator.totalbandwidthresult.value = totalbandwidth;
}
</script>
<form name="calculator" class="formtable">
<div class="formrow">
<label for="rcname">RC Name</label>
<input type="text" name="rcname">
</div>
<div class="formrow">
<label for="fps">FPS</label>
<input type="text" name="fps">
</div>
<div class="formrow">
<label for="bitrate">Bitrate</label>
<input type="text" name="bitrate">
</div>
<div class="formrow">
<label for="numberofcameras">Number of Cameras</label>
<input type="text" name="numberofcameras">
</div>
<div class="formrow">
<label for="encoding">Encoding</label>
<select name="encoding" id="encodingoptions">
<option value="h264">H.264</option>
<option value="mjpeg">MJPEG</option>
<option value="mpeg4">MPEG4</option>
</select>
</div>Total Storage:
<input type="text" name="totalstorage">Total Bandwidth:
<input type="text" name="totalbandwidth">
<input type="button" value="totalbandwidthresult" onclick="totalbandwidthresult();">
</form>
Ответ 2
Я смог понять это, выполнив ответ в этом потоке: fooobar.com/questions/290519/...
В принципе, я переименовал все значения, имена функций и имена элементов в разные значения, чтобы они не конфликтуют - и это сработало!
Ответ 3
Поскольку поведение немного странное, я провел некоторое тестирование поведения, и вот мой результат:
TL; DR
Если вы:
- В
form
и
- использует
onclick="xxx()"
для элемента
- не добавляйте
id="xxx"
или name="xxx"
к этому элементу
- (например, & lt; form & gt; button id = "totalbandwidth" onclick = "totalbandwidth()" & Bt & lt;/button & gt;/form & gt;)
Вот некоторые тесты и их результат:
Контрольный образец (может успешно вызывать функцию)
function totalbandwidth(){ alert("Total Bandwidth > 9000Mbps"); }
<form onsubmit="return false;">
<button onclick="totalbandwidth()">SUCCESS</button>
</form>