javascript - 动态创建的表单字段保持相同的 ID

标签 javascript jquery

我使用这行代码将一些文本字段动态添加到我的页面:

var textboxCount = 0;

$('#addFields').on('click', function(){

var TextField = document.createElement("input");

TextField.setAttribute("type", "text");
TextField.setAttribute("value", textboxCount);
TextField.setAttribute("name", "textbox");
TextField.setAttribute("class", "foo");
TextField.setAttribute("id", "textbox" + textboxCount);
TextField.setAttribute('onkeyup','doSomething('+textboxCount+');'); // for FF
TextField.onkeyup = function() {doSomething(textboxCount);}; // for IE

jQuery('#TextfieldList').append(eleText);
textboxCount += 1; //Increment the count

});

现在我需要此函数中字段的唯一 ID:

function doSomething(id){
    alert(id);
}

但是当我调用该函数时,我总是在每个添加的字段中获得相同的 ID。不过,文本字段中的值是正确的。

最佳答案

非常普遍的问题。更改 keyup 处理程序:

TextField.onkeyup = function(textboxCount) {
  return function() {
    doSomething(textboxCount);}; // for IE
  };
}(textboxCount);

(删除“For FF”行;根本没有必要。)

如果您不以某种方式引入新的词法作用域,那么您所有的事件处理程序都将引用完全相同的“textboxCount”变量。通过执行我上面显示的操作(并且有变体),您可以确保每个事件处理程序都有其自己的计数器的私有(private)副本,就像它在创建处理程序时所处的那样。

关于javascript - 动态创建的表单字段保持相同的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822705/

相关文章:

javascript - JSON.stringify (Javascript) 和 json.dumps (Python) 不等价吗?

javascript - 如何在 Angular 8/javascript 中按退格键删除整个子字符串?

javascript - 无法过滤 HTML 字符串中的 HTML 标记

javascript - Jquery 更改 prev() 输入字段

javascript - jquery 在提交表单上搜索其相应的 div 并隐藏表单

c# - 如何使用 C# 从 Web 客户端浏览本地网络?

javascript - 执行动态生成的 Jquery 代码

jquery - calendra 的上一个和下一个按钮不显示在 ui 中。如何解决这个问题?

php - 使用表单发布 json 数据

javascript - AngularJS - 水平滚动的 div 指示器