Подтвердить что ты не робот

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, но я не уверен.

4b9b3361

Ответ 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>