#jquery
#jquery
Вопрос:
Я пытаюсь использовать функцию автоматической суммы для 3 горизонтальных блоков, ни автоматическая сумма не работает, и я не уверен, что пошло не так со свойством readonly, даже это не работает для меня.
ниже приведен мой код.
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#t3").prop('readOnly',true);
var sum=0;
for(var i=1;i<=2;i )
{
$("#t" i).keyup(function(){
sum=sum parseInt(this.val());
});
}
$("#t3").val(sum);
});
</script>
</head>
<body>
<table>
<tr>
<td id="t1"><input type="text"></td>
<td id="t2"><input type="text"></td>
<td id="t3"><input type="text"></td>
</tr>
</table>
</body>
</html>
Ответ №1:
Привязать событие к input
‘s, а не к td
‘s:
<script>
$(document).ready(function(){
$("#t3 input").prop('readOnly',true);
var sum=0;
for(var i=1;i<=2;i )
{
$("#t" i " input").keyup(function(){
sum=sum parseInt(this.val());
});
}
$("#t3 input").val(sum);
});
</script>
Ответ №2:
Привязка кода внутри for
цикла — это нехорошо, пишите код обычно.
Попробуйте,
$('#t1,#t2 input').keyup(function(){
var val1 = parseInt($('#t1 input').val(),10);
var val2 = parseInt($('#t2 input').val(),10)
var res = (isNaN(val1)?0:val1) (isNaN(val2)?0:val2)
$('#t3 input').val(res);
});
УДАЛИТЕ ЭТУ ЗАЧЕРКНУТУЮ ЧАСТЬ ИЗ ВАШЕГО КОДА:
var sum=0;
for(var i=1;i<=2;i )
{
$("#t" i).keyup(function(){
sum=sum parseInt(this.val());
});
}
$("#t3").val(sum);
ДЕМОНСТРАЦИЯ
Обновление для вашего нового требования,
$('tr td:nth-child(3) input').prop('disabled', true);
$('tr td input:not(:disabled)').keyup(function () {
var res = $(this).closest('tr').find("input:not(:disabled)").map(function(){
return isNaN(parseInt(this.value, 10)) ? 0 : parseInt(this.value, 10);
}).get().reduce(function (a, b) {
return a b
}, 0);
$(this).closest('tr').find("input:disabled").val(res);
});
ДЕМОНСТРАЦИЯ
Комментарии:
1. Спасибо, я проверил демонстрацию .. однако у меня есть несколько таких строк, поэтому я хочу использовать их в цикле .. будет ли этот способ работать и в цикле?
2. @user2866314: Да, это сработало, но мое требование — использовать это в цикле .. Ниже то, что я использую <script> $(document) . готово(function() { $(«#t3»).find(«ввод»).prop(‘Только для чтения’, true); var sum = 0; for (var i = 1; i <= 2; i ) { $(«#t» i).найти («ввод»). keyup(function() { sum = sum parseInt($(this).find(«ввод»).val(),10); }); } $(«# t3»).find(«ввод»).val(isNaN(сумма)?0: сумма); }); </script>