我在使用事件textfield
和onfocus()
循环onblur()
时遇到问题。在单行中,该事件可以正常运行,但如果我尝试在文本字段中使用for
循环创建两行,则textfield
上的该事件无法运行。
我需要解决这个问题,谢谢
<script type="text/javascript">
function startCalc() {
interval=setInterval("calc()",1);
}
function calc() {
var obj=document.hitung;
var one=obj.sks.value;
if(one == 2)
{ var hsks = 14; }
else if(one == 4)
{ var hsks = 28; }
else
{ var hsks = 0; }
obj.n_pertemuan.value=(hsks);
}
function stopCalc() {
clearInterval(interval);
}
</script>
<center>
<form name="hitung">
<?php
for($x = 1; $x <= 2; $x++)
{
?>
<table width="205" border="1" cellspacing="0" cellpadding="2">
<tr>
<td height="44" colspan="2" align="center">Js Coba</td>
</tr>
<tr>
<td width="84" align="center">SKS</td>
<td width="113" align="center">PERTEMUAN</td>
</tr>
<tr>
<td align="center"><input name="sks" type="text" onFocus="startCalc();" onBlur="stopCalc();" size="5"/></td>
<td align="center"><input name="n_pertemuan" type="text" size="5" ></td>
</tr>
</table>
<?php } ?>
</form>
</center>
答案 0 :(得分:0)
在这里,我将指出你所犯的一些错误:
当您创建三个或更多表时此语句
var
one = obj.sks.value;
当你有更多的文本字段时它将返回错误,因为它会像对象一样运行。所以你必须迭代它们来获取它们的值。更好地使用getElementsByName 方法。我做了一些更改以使事情变得清晰。首先交换事件处理程序以更好地控制程序,否则它会疯狂,因为您在每个毫秒之后使用setinterval。
<input name="sks" type="text" onBlur="startCalc();" onFocus="stopCalc();" size="5"/>
我也改变了你的startClac函数
var obj, one, interval;
function startCalc(){
obj=document.hitung;
one=document.getElementsByName('sks');
for(i=0;i<one.length;i++){
(function(val){
if(one[val].value !=""){
interval=setInterval(function (){
calc(one[val].value);
},1000);
}
})(i);
}
}
更好地在startCalc
之外声明obj,one和interval变量,以便更好地控制。
使用getElementsByName 方法获取名称为'sks'
的每个输入。迭代它们以检查其值。它会创建一个closure
相关问题,所以我建议立即使用调用函数来保持i的原样,除非它大于你实际的文本字段数,否则你将失去对它的追踪。
如果你想让你的代码省略一个变量的value属性,因为它是一个nodelist而nodelist没有value属性。它只有length属性.inside startCalc()函数写
one = obj.sks;
output = obj.n_pertemuan;
将obj,one and output
变量保留在calc()函数的范围之外。这是您必须在calc()函数中进行的修改,并保持其余部分不变。
for(i=0;i<one.length;i++){
(function(val){
if(one[val].value == 2)
{ var hsks = 14; }
else if(one[val].value == 4)
{ var hsks = 28; }
else
{ var hsks = 10; }
output[val].value=hsks;
console.log(output[val].value);
})(i);
}