javascript - 使用具有相同 ID 的多个文本字段的 Jquery 函数

标签 javascript jquery

我正在寻求有关如何使用由 javascript 生成的 jquery 引用特定文本字段的帮助。

我得到的仅适用于字段引用的第一个实例。

HTML 代码:

Record ID<input type="text" name="ri[]" id="ri1" size="7" style="font-size:0.9em;">

Qty Per Box<input type="text" name="qpb[]" id="qpb1" size="7" style="font-size:0.9em;">

Javascript 用于生成更多行,如上所示

<!--Dynamically Create New Rows For Data Entry-->
 <script language="javascript">
        function addRow(tableID) {

            var table = document.getElementById(tableID);

            var rowCount = table.rows.length;
            var row = table.insertRow(rowCount);

            var colCount = table.rows[0].cells.length;

            for(var i=0; i<colCount; i++) {

                var newcell = row.insertCell(i);

                newcell.innerHTML = table.rows[0].cells[i].innerHTML;
                //alert(newcell.childNodes);
                switch(newcell.childNodes[0].type) {
                    case "text":
                            newcell.childNodes[0].value = "";
                            break;
                    case "checkbox":
                            newcell.childNodes[0].checked = false;
                            break;
                }
            }
        }

        function deleteRow(tableID) {
            try {
            var table = document.getElementById(tableID);
            var rowCount = table.rows.length;

            for(var i=0; i<rowCount; i++) {
                var row = table.rows[i];
                var chkbox = row.cells[0].childNodes[0];
                if(null != chkbox && true === chkbox.checked) {
                    if(rowCount <= 1) {
                        alert("Cannot delete all the rows.");
                        break;
                    }
                    table.deleteRow(i);
                    rowCount--;
                    i--;
                }


            }
            }catch(e) {
                alert(e);
            }
        }

    </script>

所以我最终得到的是具有相同 id/name 的多行。我只想做的是验证 keyup 上的输入,因此我决定使用 (this).val 方法,但它仅适用于第一行。

<script>
$(document).ready(function() {
    $("#ri1").keyup(function() {
    $(this).val($(this).val().replace(/[^\d]/g, ""));
    });
 });
</script>

有人知道以这种方式生成多行输入字段时验证输入的更好解决方案吗?

Js fiddle http://jsfiddle.net/nS2LM/22/

最佳答案

不建议多次使用 ID,但如果您使用最新的 jQuery,那么事件委托(delegate)就是您的答案:

<input type="text" name="ri[1]" id="ri1" size="7" style="font-size:0.9em;" class="do_stuff">
<input type="text" name="ri[2]" id="ri2" size="7" style="font-size:0.9em;" class="do_stuff">


<script>
$(document).ready(function() {
    $('body').on('keyup', '.do_stuff', function() {
        $(this).val($(this).val().replace(/[^\d]/g, ""));
    });
});
</script>

上面的代码将 keyup 绑定(bind)到主体的子 .do_stuff 元素,因此任何动态创建的具有 .do_stuff 类的元素都将被 keyup 事件捕获。

关于javascript - 使用具有相同 ID 的多个文本字段的 Jquery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227004/

相关文章:

javascript - _json 函数的作用是什么?它来自哪个库?

javascript - 如何编写返回具有正确值的 Q 库 promise 的 JS 函数?

javascript - jquery中获取类别过滤器颜色的方法

jquery - DOM 上类似于电子表格的公式

c# - Web 方法与 JavaScript 背后的代码?

javascript - jQuery FancyBox YouTube 视频无法正常工作

c# - javascript参数字符长度限制?

php - 如何使用 javascript 或 php 禁用 Internet Explorer 缓存

javascript - JQuery Mobile - 如何设置多选的值?

jquery - mouseMove 上的水平滚动 - 较小 div 中的宽 div 并溢出 :hidden (Can't get the math to work)