我正在动态创建表单,因此编辑表单元素的属性。尝试更改标签时,分配自动生成的ID工作正常但是当使用生成的ID更改此标签时,jQuery中的函数或keyup()
会一直调用所有先前创建的标签ID。这意味着当我想编辑一个标签时,它最终会编辑每个标签。
<input type="text" id="change-label"><br><br>
<button id="add-button">add label</button>
<div id="add-label"></div>
$('#add-button').click(function(){
var div = document.createElement('div');
var textLabel = document.createElement('label');
var labelNode = document.createTextNode('untitled');
textLabel.appendChild(labelNode);
textLabel.id = autoIdClosure();
$('#change-label').val('untitled');
div.appendChild(textLabel);
$('#add-label').append(div);
});
var autoIdClosure = (function(){
var counter = 0;
var labelId = "textInputLabel";
return function(){
counter += 1;
var id = labelId + counter;
editLabelWrapper(id)
return id;
}
})();
function editLabelWrapper(id){
function editLabel(){
var value = $(this).val();
$("#"+id).text(value);
}
$("#change-label").keyup(editLabel).keyup();
}
我已经找到了使用onkeyup="$('#'+globaID).text($(this).val());"
的替代方案,但我需要了解我做错了什么,以便我可以从中学习。
答案 0 :(得分:1)
我认为你正在思考这件事......
而不是使用唯一的ID,而是使用类,使其更容易处理
因此,将<div id="add-label"></div>
更改为<div class="add-label"></div>
然后你想要做的是,当#change-label
中给出一个值时,你想要它在最后div.add-label
中。
所以函数将成为这个:
$("#change-label").on('keyup', function() {
$('.add-label:last').text( $(this).val() );
});
接下来您要做的是将函数绑定到#add-button
。点击后,我们希望在最后一个之后添加新的div.add-label
。并清空#change-label
。您可以使用此功能执行此操作:
$('#add-button').on('click', function() {
$('.add-label:last').after('<div class="add-label"></div>');
$('#change-label').val('');
});