我有两个工作函数,我想分配给两个输入:
<input type="text" id="start0" value="0" name="start[]" onkeyup="displayTotal();"/>
<input type="text" id="end0" value="0" name="end[]" onkeyup="displayTotal();"/>
我希望能够使用displayHoras(); onkeyup也是这两个。 (此线程已经有2个2s)。当我使用displayHoras();而不是displayTotal();它有效,但是当我把它们都这样叫它时它不会:
<input type="text" id="start0" value="0" name="start[]" onkeyup="displayTotal();displayHoras();"/>
<input type="text" id="end0" value="0" name="end[]" onkeyup="displayTotal();displayHoras();"/>
欢迎任何帮助。
我将分享这两个功能的代码,因为......谁知道?可能存在问题,对吗?
function displayTotal()
{
var tableRows = document.getElementById('budgetTable').getElementsByTagName('tr');
var totalDays = tableRows.length - 3; //Don't count the header rows and the Total rows
var totalPrice = 0;
var price = filterNum(document.getElementById( 'txtPrice' ).value);
var totalField = document.getElementById( 'txtTotal' );
var tempHours = 0;
var tempTotal = 0;
for(var i = 0; i < totalDays; i++)
{
tempHours = document.getElementById("end" + i).value - document.getElementById("start" + i).value;
tempTotal = tempHours * price;
document.getElementById("total" + i).innerHTML = formatCurrency(tempTotal);
totalPrice += tempTotal;
}
totalField.value = formatCurrency(totalPrice*1.21);
}
function displayHoras()
{
var tableRows = document.getElementById('budgetTable').getElementsByTagName('tr');
var totalDays = tableRows.length - 3;
var tempHours = 0;
var tempTotal = 0;
for(var i = 0; i < totalDays; i++)
{
tempHours = document.getElementById("end" + i).value - document.getElementById("start" + i).value;
document.getElementById("totalHoras" + i).innerHTML = tempHours;
}
}
编辑:我添加了创建下表的函数。
function keyUpCall() {displayHoras(); displayTotal();}
function addRowToTable()
{
var tbl = document.getElementById('budgetTable');
var lastRow = tbl.rows.length - 4;
var iteration = lastRow;
var entry = iteration - 1; //because we started with day0, etc
var row = tbl.insertRow(lastRow);
// day cell
var cellDay = row.insertCell(0);
cellDay.appendChild(createInput('text','dia' + entry, '', keyUpCall, 'dia' + entry));
// start cell
var cellStart = row.insertCell(1);
cellStart.appendChild(createInput('text','start' + entry, 0, keyUpCall, 'start' + entry));
// end cell
var cellEnd = row.insertCell(2);
cellEnd.appendChild(createInput('text','end' + entry, 0, keyUpCall, 'end' + entry));
// precio unitario
var cellPrecioUnitario = row.insertCell(3);
cellPrecioUnitario.appendChild(createInput('text', null, '$36', null, null));
// total HOras
var cellTotalHoras = row.insertCell(4);
cellTotalHoras.id = 'totalHoras' + entry;
// total cell
var cellTotal = row.insertCell(5);
cellTotal.id = 'total' + entry;
}
function createInput(type, id, value, action, name)
{
var el = document.createElement('input');
el.type = type;
el.id = id;
el.value = value;
el.onkeyup = action;
el.name = name;
return el;
}
此时,由于某种原因,行动甚至没有附加。
Edit2:我解决了问题! IUPI!就是这条线: var totalDays = tableRows.length - 3;
在此表单的上一个版本中,我使用了3个额外的行,我的客户让我为Tax添加了几个额外的行并且没有Tax结果。我改成了: var totalDays = tableRows.length - 5; 这就解决了!
答案 0 :(得分:3)
您可以创建一个调用这两个函数的函数
function function1(){
displayTotal();
displayHoras();}
答案 1 :(得分:2)
我建议创建一个函数,然后调用你的两个函数,例如:
function handleKeyUp() { // Or `updateDisplay` or some such
displayTotal();
displayHoras();
}
在onXYZ
属性中放置太多文本是有问题的(虽然我没有立即看到你的原因不起作用)。
非主题1 :我还建议使用DOM2方法连接事件处理程序(addEventListener
在符合标准的浏览器上,attachEvent
在IE8及更低版本上)而不是像onXYZ
属性那样使用DOM0机制。
非主题2 :jQuery,Prototype,YUI,Closure或any of several others等JavaScript库可以帮助平滑浏览器差异(甚至错误),如上面的事件附件,以及提供许多方便的实用程序功能。完全可选,但使用一个可以帮助您专注于您实际尝试的操作,而不必担心各种不同浏览器中的管道略有不同。
答案 2 :(得分:1)
老派javascript ^^
尝试使用此替代属性变体,并使用bugzilla或javascript调试器
var checks_keyup = function() {
displayTotal();
displayHoras();
}
var inputs = document.getElementsByTagName('input');
for(var i=0;i<inputs.length;i++) {
if(/^(start|end)/.test(inputs[i].id))
inputs[i].onkeyup = checks_keyup;
}
答案 3 :(得分:0)
尝试在第一个函数中调用第二个函数,
function displayTotal()
{
\\.....your code
displayHoras();
}