【问题标题】:Creating an element and adding it an event in Javascript在Javascript中创建一个元素并添加一个事件
【发布时间】:2011-07-03 23:44:29
【问题描述】:

我在向 Javascript 中动态创建的元素添加事件时遇到问题。这是代码:

var monto=document.createElement('input');
monto.type='text';
monto.name='monto'+cantpagos;
monto.id='monto'+cantpagos;
if(monto.addEventListener) monto.addEventListener("blur", sumpagos, false);
else if(monto.attachEvent) monto.attachEvent("onblur", sumpagos);
document.getElementById('pagos').appendChild(monto);

但是它不起作用,一旦我移除焦点,就不会调用该函数。我究竟做错了什么?先谢谢了。

编辑:这是更相关的代码:

function sumpagos()
{
   var total=0;
   for(var i=1;i<=cantpagos;i++)
   {
      total+=document.getElementById('monto'+i).value;
   }
   document.getElementById('total').innerHTML="$"+total;
}

function addpago()
{
var i = 0;
var cuota=document.createElement('select');
cuota.name="cuota"+cantpagos;
cuota.id="cuota"+cantpagos;
for(i=1;i<=3;i++)
{
   cuota.options[i-1]=new Option("Cuota "+i, i);
}
document.getElementById('pagos').appendChild(cuota);
var monto=document.createElement('input');
monto.type='text';
monto.name='monto'+cantpagos;
monto.id='monto'+cantpagos;
if(monto.addEventListener) monto.addEventListener("blur", sumpagos, false);
else if(monto.attachEvent) monto.attachEvent("onblur", sumpagos);
document.getElementById('pagos').appendChild(monto);
document.getElementById('pagos').innerHTML+="<br />";
cantpagos++;
}

<td id="total">
$0
</td>

<input type="button" name="maspago" value="Añadir un Pago" onclick="addpago();" />
<input type="button" name="memospago" value="Eliminar un Pago" onclick="deletepago();" />
<div id="pagos"></div>

【问题讨论】:

  • 您已排除相关的 javascript 和 HTML。您发布的代码没有明显问题。
  • patrick,我将发布受影响的盒子和功能。
  • @Carlos 函数sampagos 定义了吗? typeof sampagos 带给你什么?
  • 你的浏览器报错了吗? :)

标签: javascript html


【解决方案1】:

在这里,这应该可以正常工作:

function sumpagos() {
    var total = 0,
        monto;

    for(var i=1; i <= cantpagos; i++) {
        monto = document.getElementById('monto' + i);
        if ( monto != null ) {
            total += +monto.value;
        }
    }    
    document.getElementById('total').innerHTML = '$' + total;
}

试试这个:

var monto = document.createElement('input');
monto.type = 'text';
monto.name = monto.id = 'monto' + cantpagos;
monto.onblur = sumpagos;
document.getElementById('pagos').appendChild(monto);

更新:

我相信这行代码是你的问题的原因:

document.getElementById('pagos').innerHTML+="<br />";

没有该行的演示:http://jsfiddle.net/A7aPA/
使用该行进行演示:http://jsfiddle.net/A7aPA/1/

如您所见,第一个演示有效,第二个无效。

删除该行,它应该可以工作...

【讨论】:

  • @Carlos Strange,如果在此演示中运行良好:jsfiddle.net/A7aPA 我不明白这一点。它要么必须工作,要么必须抛出错误。这里没有第三种选择。你确定没有报错吗?
  • 确定没有抛出错误,我正在检查错误控制台。每当我向函数添加警报时,它都不会显示,所以我可以肯定地说,当函数附加到输入元素而不是函数本身时肯定存在某种问题。
  • @Carlos 您必须确保在addpago 函数内部,标识符名称sumpagos 指的是正确的函数。在addpago 函数中尝试console.log(sumpagos)。是否记录了正确的函数?
  • @Carlos 你在 Firefox 中有 Firebug 吗?你安装了 Chrome 吗?
  • 我有 Firebug 但没有 Chrome。
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多