我在以前的问题中找到了很多有用的帮助,但似乎无法获得我需要的最后一件作品。我使用PHP循环表单字段并唯一地命名字段(使用变量)。我的一个领域是"费用类型"。另一个是费用金额"。如果"里程数"我希望自动显示里程费用的费用金额。是选择的费用。我可以在数组外部执行此操作,但在数组中我无法在数组中获取正确的名称。 PHP代码和表单的其余部分完美地工作,只是javascript没有找到正确的字段来触发/更新。这是代码:
<?php
$t = -1;
foreach($details as $detail)
{
$t++;
echo '<th><select name="record['.$t.'][expense]" onChange="mileage();" ><option value="">Expense</option>';
foreach($expensecoderesults as $code)
{
echo '<option value="'.$code->expense_code_id.'"';
if($code->expense_code_id == $expense_type_id){echo 'selected="selected" ';}
echo '>'.$code->expense_code_name.'</option>';
}
echo '</select></th></tr>';
echo '<th><input type="number" "step=".01" name="record['.$t.'][amount]" /></th>';
}
?>
<script language="javascript" type="text/javascript">
function mileage()
{
var myForm = document.forms.edit_emp_exp;
var myControls = myForm.elements['record[][expense]'];
var myAmount = myForm.elements['record[][amount]'];
for (var i = 0; i < myControls.length; i++)
{
if(myControls.value == 28)//28 is the id of "mileage" expense
{myAmount.value=".54";}
}
}
答案 0 :(得分:1)
这部分代码无法在javascript中运行:
var myControls = myForm.elements['record[][expense]'];
var myAmount = myForm.elements['record[][amount]'];
您不需要循环来查找所选值(顺便说一句,您正在检查未选中的选项值,但循环中的所有选项值,因此选择任何选项将导致将输入值设置为“.54”)
试试这个javascript代码。
<script language="javascript" type="text/javascript">
function mileage(el) {
var selectedIndex = el.selectedIndex;
var selectedValue = el.options[selectedIndex].value;
if ( selectedValue == 28 ) { //28 is the id of "mileage" expense
el.nextElementSibling.value=".54";
}
}
</script>
您需要将里程()中的里程()函数调用从里程数()更改为onChange =“里程(此);”
它应该与PHP生成的HTML一起使用。但我建议使用jQuery来完成这些任务。
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
</head>
<body>
<form id="edit_emp_exp">
<select name='record[0][expense]'>
<option value="">Expense</option>
<option value="1">1-name</option>
<option value="2">2-name</option>
<option value="3">3-name</option>
<option value="5">5-name</option>
<option value="10">10-name</option>
<option value="28">28-name</option>
</select>
<input type="number" step=".01" name="record[0][amount]" />
<select name='record[1][expense]' onChange="mileage(this);">
<option value="">Expense</option>
<option value="1">1-name</option>
<option value="2">2-name</option>
<option value="28">28-another-name</option>
<option value="32">32-name</option>
</select>
<input type="number" step=".01" name="record[0][amount]" />
</form>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
$('#edit_emp_exp select').on('change', function(event) {
if ( $(this).val() == 28 ) {
$(this).next().val('.24');
}
});
});
</script>
</body>
</html>