html javascript 自动完成不适用于动态添加的文本框

html javascript autocomplete not working with dynamically added textboxes

嗨,当我在 1 个文本框上使用 jquery 自动完成功能时,它可以工作,但是当我动态添加新文本框时,这些新文本框没有相同的自动完成功能

这是我的 javascript 自动完成

<link rel="stylesheet" type="text/css" href="jquery.autocomplete.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.autocomplete.js"></script>
<script type="text/javascript" src="dynamicscript.js"></script> 
<script>
    $(document).ready(function(){
        $(".DRUG_NAME").autocomplete("gethint.php", {
            selectFirst: true
        });

    });
</script>

这是我每次动态添加的,html代码

<form method="post">

    <p>
        <input type="button" value="Add Drug" onClick="addRow('dataTable')" />
        <input type="button" value="Remove Drug" onClick="deleteRow('dataTable')" />
    </p>

    <table id="dataTable" class="form" border="1">
        <tbody>
            <tr>
                <p>
                    <td>
                        <input type="checkbox" required="required" name="chk[]" checked="checked" />
                    </td>
                    <td>
                        <label>Drug</label>
                        <input type="text" required="required" name="DRUG_NAME[]" id="DRUG_NAME" class="DRUG_NAME">
                    </td>

                </p>
            </tr>
        </tbody>
    </table>

    <input type="submit" value="Save" />
</form>

这是 javascript 动态添加/删除行我什至在我的添加行之后添加了自动完成功能以尝试让 jquery 自动完成在我添加行后每次被调用但它仍然不起作用

function addRow(tableID) {
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;
    if(rowCount < 5) {  // limit the user from creating fields more than your limits
        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;
        }
    } else {
        alert("Maximum Drug is 5");    
    }

    $("#DRUG_NAME").autocomplete("gethint.php", {
        selectFirst: true
    });
}

function deleteRow(tableID) {
    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) {  // limit the user from removing all the fields
                alert("Nothing to Remove");
                break;
            }
            table.deleteRow(i);
            rowCount--;
            i--;
        }
    }
}

有什么想法吗??发送

您可能需要实时绑定。

看看这个 post: Bind jQuery UI autocomplete using .live()

问题是您正在创建具有相同 ID DRUG_NAME 的元素,然后您正在应用自动完成按 ID 选择字段。

从第一行的输入字段中删除 id,因为它将被复制:

<input type="text" required="required" name="DRUG_NAME[]" class="DRUG_NAME">

创建新行时使用 class 选择器:

$(".DRUG_NAME").autocomplete("gethint.php", {
// ^^
    selectFirst: true
});

以下代码(来自您的 post)将事件附加到页面上 当前 具有 class DRUG_NAME 的元素:

$(".DRUG_NAME").autocomplete("gethint.php", {
    selectFirst: true
});

当您动态添加选择器将被更新的元素时,但事件仍然不会附加,请参阅此答案:Event binding on dynamically created elements?

使用那个答案,连同他的答案中链接的@LcKjus (Bind jQuery UI autocomplete using .live()),我相信这对你有用(用这个片段替换上面的代码来测试):

$(".DRUG_NAME").on("focus", function (event) {
   $(this).autocomplete(options);
});

不过,这可能 运行 自动完成代码多次(如果用户重新聚焦输入字段),因此请注意这一点。

P.S。正如其他人指出的那样,在同一页面上拥有多个具有相同 ID 的元素是不明智的。

绑定自动完成的代码正在 运行 准备好文档。添加动态文本框后,您需要再次 运行 它(可能创建一个 bindAuto() 函数或其他任何东西,然后从两个地方 运行 它)。