Javascript根据数组

时间:2016-08-24 18:40:43

标签: javascript php arrays

我在以前的问题中找到了很多有用的帮助,但似乎无法获得我需要的最后一件作品。我使用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";}
    }
}

1 个答案:

答案 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>