jquery如何检测当前输入id

jquery how to detect current input id

我有一个从 yii2 生成的 table,我想做一个表格输入,但在发送提交之前,有一个客户端验证输入字段。假设我不知道输入 ID,因为它是由 yii2 生成的。这是第一行的代码片段

<tr class="kv-tabform-row" data-key="4">
    <td class="kv-align-center kv-align-middle">1</td>
    <td class="kv-grid-hide kv-align-top">
        <div class="form-group field-kegbulan-4-id">
            <input type="hidden" id="kegbulan-4-id" class="form-control" name="KegBulan[4][id]" value="4">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-grid-hide kv-align-top">
        <div class="form-group field-kegbulan-4-id_keg_ta_uk required">
            <input type="hidden" id="kegbulan-4-id_keg_ta_uk" class="form-control" name="KegBulan[4][id_keg_ta_uk]" value="6">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-align-middle" style="width:300px;">Pengadaan Barang Kuasi, Buku Uji, Plat Uji dan Stiker Uji</td>
    <td class="kv-align-middle">
        <input type="text" id="kegbulan-4-anggaran" class="anggaran" name="KegBulan-[4][anggaran]" value="300,000,000" disabled="disabled" style="width:100px;"></td>
    <td class="kv-align-top">
        <div class="form-group field-kegbulan-4-sp2d required">
            <input type="text" id="kegbulan-4-sp2d" class="form-control sp2d" name="KegBulan[4][sp2d]" value="680000" onchange="tesbos()">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-align-top" style="width:70px;">
        <div class="form-group field-kegbulan-4-persen_sp2d required">
            <input type="text" id="kegbulan-4-persen_sp2d" class="form-control" name="KegBulan[4][persen_sp2d]" value="2">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-align-top">
        <div class="form-group field-kegbulan-4-spj required">
            <input type="text" id="kegbulan-4-spj" class="form-control" name="KegBulan[4][spj]" value="680000">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-align-top" style="width:70px;">
        <div class="form-group field-kegbulan-4-persen_spj required">
            <input type="text" id="kegbulan-4-persen_spj" class="form-control" name="KegBulan[4][persen_spj]" value="2">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-align-top" style="width:70px;">
        <div class="form-group field-kegbulan-4-target required">
            <input type="text" id="kegbulan-4-target" class="form-control" name="KegBulan[4][target]" value="0">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="kv-align-top" style="width:70px;">
        <div class="form-group field-kegbulan-4-pfisik required">
            <input type="text" id="kegbulan-4-pfisik" class="form-control" name="KegBulan[4][pfisik]" value="10">
            <div class="help-block"></div>
        </div>
    </td>
    <td class="skip-export kv-align-center kv-align-middle" style="width:60px;"><a href="/yii2/yii-application/frontend/web/keg-bulan/view?id=4" title="View" data-pjax="0">
    <span class="glyphicon glyphicon-eye-open"></span></a> <a href="/yii2/yii-application/frontend/web/keg-bulan/update?id=4" title="Update" data-pjax="0" style="display:none;">
    <span class="glyphicon glyphicon-pencil"></span></a> <a href="/yii2/yii-application/frontend/web/keg-bulan/delete?id=4" title="Delete" data-confirm="Are you sure to delete this item?" data-method="post" data-pjax="0">
    <span class="glyphicon glyphicon-trash"></span></a></td>
    <td class="skip-export kv-align-center kv-align-middle kv-row-select" style="width:50px;">
    <input type="checkbox" name="selection[]" value="4"></td>
</tr>

截图:http://www.imagebam.com/image/569de2398154258

输入 sp2d 将检查输入 anggaran 并进行一些验证,如果 (sp2d > anggaran) 那么 "sp2d exceed anggaran limit"

这里是初始的 javascript 函数,用于检查函数是否通过 onchange

触发
function tesbos(){

   var sp2d = $(".sp2d").attr("id");
    console.log(sp2d);

}

当我转到 sp2d 输入中的第 2 行时,当我检查我的控制台日志时,它仍然打印第 1 行的 sp2d 输入 ID,当我转到时如何获取我的输入 id automatically/dynamically到任何一行?任何帮助将不胜感激

假设您可以更改标记,则需要将元素引用传递给点击处理程序

<input type="text" id="kegbulan-4-sp2d" class="form-control sp2d" name="KegBulan[4][sp2d]" value="680000" onchange="tesbos(this)">

然后

function tesbos(el) {
    alert(el.id)
}

但我建议使用 jQuery 事件处理程序而不是内联事件处理程序,因此从标记

中删除 onchange=""
<input type="text" id="kegbulan-4-sp2d" class="form-control sp2d" name="KegBulan[4][sp2d]" value="680000">

然后

jQuery(function($){
    $(".sp2d").change(function(){
        alert(this.id)
    })
})

如果我没理解错的话,你的 table 的每一行都包括:

  • anggaran(预算)字段[固定值]
  • 一个sp2d(花费到日期)字段[用户输入]。

并且您想针对每个 sp2d(迄今为止的支出)值与其对应的 anggaran(预算)值的变化进行检查。

为此,您不需要知道任何一个字段的 ID。只需找到 anggaran 字段 相对于 哪个 sp2d 字段触发更改事件。

首先,从HTML中删除onchange="tesbos()"

然后将此代码粘贴到您文档的 HEAD 中的 <script></script> 标记之间(如果您的代码是以这种方式组织的,则粘贴到 .js 文件中)。

jQuery(function($) {
    $("#containerID").on('change', ".sp2d", tesbos); // where containerID is the ID of eg. a DIV in which the YII table sits

    function tesbos() {
        var sp2d_value = $(this).val();
        var anggaran_value = $(this).closest("tr").find(".anggaran").val();//find the anggaran field in the same row, and grab its value.

        console.log(anggaran_value, sp2d_value);

        if(sp2d_value > anggaran_value) {
            //anggaran is exceeded
            ...
        } else {
            //anggaran is not exceeded
            ...
        }
    }
});