1
У меня есть строка в таблице, которая может быть дублирована javascript. В первой строке у меня есть код javascript, который вычисляет.Функция цикла javascript для каждой строки после добавления новой строки
После дублирования новой строки известково Javascript не работает для новой строки ..
Что я сделал не так?
строка таблицы:
<table class="Parameter" id="new">
<form action="ProjectParameterNewRecord.php" method="post">
<tr>
<td>
<input type="text" id="Parameters" name="TypeOfOut" />
</td>
<td>
<?php include "ExchangeRates.php"?>
</td>
</td>
<td>
<input id="Cost" type="number" value="" class="ee105" name="Cost" onchange="changeCost()">
</td>
<td>
<input id="Amount" type="number" value="" class="ee105" name="Amount" onchange="changeAmount()">
</td>
<td><span id="minisum" name="minisum" onchange="changeminisum()"></span>
</td>
<td id="system">
<input type="hidden" id="ParameterID" name="ParameterID"></input>
</td>
<td id="system">
<input type="hidden" id="ProjectID" name="ProjectID" value="3"></input>
</td>
<td>
<input type="submit" value="Submit">
</td>
</form>
</tr>
</table>
код, чтобы создать новую строку:
<script>
var counter = 1;
jQuery('img.add-author').click(function(event){
event.preventDefault();
counter++;
var newRow = jQuery(' <tr class="Parameters" id="AA"><td><input type="text" id="Parameters" name="TypeOfOut"/></td><td><select id="Unit" type="text" value=" " class="ee105" name="Unit" onchange="changeUnit(this.value)"><option value="2">KM</option><option value="4">euro</option><option value="3">$</option><option value="25">WorkHour</option><option value="3">dollar</option><option value="25">WorkHour</option> </select</td></td><td><input id="Cost" type="number" value="" class="ee105" name="Cost" onchange="changeCost()"></td><td><input id="Amount" type="number" value="" class="ee105" name="Amount" onchange="changeAmount()"></td><td><span id="minisum" name="minisum" onchange="changeminisum()"></span></td><td id="system"><input type="hidden" id="ParameterID" name="ParameterID' + counter +'"></input></td><td id="system"><input type="hidden" id="ProjectID" name="ProjectID" value="3"></input></td><td><input type="submit" value="Submit"></td></tr>');
jQuery('table.Parameter#new').append(newRow);
});
</script>
Javascript код для расчета:
function CalcUnitValue() {
var U = document.getElementById("Unit").value;
var SUM = -1 * ((((($('#Amount').val())) * (((($('#Cost').val())) * (($('#Unit').val())))))));
document.getElementById("minisum").innerHTML = SUM;
document.getElementById("minisum").readOnly = true;
}
function changeCost() {
var C = document.getElementById("Cost").value;
var SUM = -1 * ((((($('#Amount').val())) * (((($('#Cost').val())) * (($('#Unit').val())))))));
document.getElementById("minisum").innerHTML = SUM;
document.getElementById("minisum").readOnly = true;
}
function changeAmount() {
var C = document.getElementById("Amount").value;
var SUM = -1 * ((((($('#Amount').val())) * (((($('#Cost').val())) * (($('#Unit').val())))))));
document.getElementById("minisum").innerHTML = SUM;
document.getElementById("minisum").readOnly = true;
}
function changeUnit() {
var C = document.getElementById("Amount").value;
var SUM = -1 * ((((($('#Amount').val())) * (((($('#Cost').val())) * (($('#Unit').val())))))));
document.getElementById("minisum").innerHTML = SUM;
document.getElementById("minisum").readOnly = true;
}
function minisum() {
var SUM = -1 * ((((($('#Amount').val())) * (((($('#Cost').val())) * (($('#Unit').val())))))));
return alert(document.getElementById('minisuminput').innerHTML);
спасибо :)
кажется как будто отсутствует большая часть вашего кода? Где находится тег '
Ничего себе ... никогда не видел столько ненужных круглых скобок перед '((((($ ('# Amount'). Val())) * (((($ ('# Cost'). Val())) * (($ ('# Unit'). Val()))))))) 'Вы можете удалить не менее 7 (пар) из них! На самом деле, я думаю, что все они могут быть удалены без ущерба для расчета там :) –
CalcUnitValue, changeCost, changeAmount и changeUnit все одинаковы, кроме первой строки в каждой, где вы устанавливаете переменную, которая тогда никогда не используется. Избавьтесь от трех из этих четырех функций, ненужной переменной и ненужных круглых скобок, на которые указывает @TrueBlueAussie. – duncan
ответ
</td>
посередине. Вам также необходимо поставитьform
за пределыtable
.</select>
отсутствует и заменен дополнительным</td>
.a * b * c * d
.inputs
иimg
элементы предназначены для самозакрывания, не имеют концевых меток.Используйте делегированы обработчики событий, как это:
Re шаблонным: вы можете хранить свой шаблон строку в фиктивном
script
блоке с неизвестным типом (я используюtext/template
) и он будет проигнорирован браузером.например.
Вы отметите
{counter}
заполнителя, где вы хотите, чтобы вставить новое значение. Используйте его как источник HTML для создания новых строк.например.
JSFiddle играть (большинство из этого функционала):https://jsfiddle.net/TrueBlueAussie/33e9ptgu/
источник
2016-01-21 17:03:42
кто я печатаю это: $ (". Minisum", $ tr) .html (sum); во входное значение? –
Похоже, ваша проблема исходит от наличия повторяющихся идентификаторов. Когда есть повторяющиеся идентификаторы, поведение
document.getElementById()
не определено. Каждый браузер попытается сделать что-то разумное, но нет способа узнать, какой элемент будет возвращен (хотя это usually the first element).Одним из вариантов являются изменение дублированных идентификаторов в
class
, а затем при создании новой строки, дать ту строке, это собственный уникальный идентификатор с помощью счетчика:var newRow = jQuery(' <tr class="Parameters" id="' + counter + '"><td>.....</td></tr> ');
Это позволит вам получить доступ к какому грести вы хотите для расчета, а также это дети using jquery:
Вместо
$('#Cost')
илиdocument.getElementById("minisum")
, используйте$('#' + [number of rowid]).find('.Cost');
или$('#' + [number of rowid]).find('.minisum');
Несколько других советов:
<input>
в ваши функции, просто передать его в качестве параметра, как так:onchange="changeCost(value)"
. Теперь вы можете удалить 3 из ваших 4 идентичных функций, а также удалить первую строку оставшейся.</input>
меток (см here)</td>
метки на вашу вторую колонке</tr>
и</form>
теговисточник
2016-01-21 17:55:01
Смежные вопросы