【发布时间】:2015-06-17 17:14:58
【问题描述】:
我有一个可以通过使用基于this script 的js 脚本来动态更新的表单。动态生成选择列表以允许为动态生成的字段选择属性。但是,该列表包含数百个独特的属性,因此我想添加一个“搜索”框,以便更容易选择。我一直在使用 Jquery-ui 自动完成功能,当输入框位于动态更新的表单之外时,它可以正常工作,但是,一旦我将其放入表单中,它就不起作用了。以下 div 被动态插入到表单中:
<div id="readroot" style="display: none">
<select name="_name">
<option value="1">1</option>
<option value="2">2</option>
//many more options...
</select>
First text
<input type="text" size="15" name="xyz" /> Second text
<input type="text" size="15" name="xyz2" />
<input type="button" value="Remove trait" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" />
</div>
形式:
<form method="post" name="disForm" target="_blank" id="disForm">
<div id="writeroot"></div>
<input type="button" value="Add trait" onclick="moreFields();" />
</form>
这是将新字段(“readroot”div)添加到“writeroot”-div 的脚本:
<script type="text/javascript">
var counter = 0;
function moreFields() {
counter++;
var newFields = document.getElementById('readroot').cloneNode(true);
//newFields.id = '';
newFields.style.display = 'block';
var newField = newFields.childNodes;
for (var i = 0; i < newField.length; i++) {
var theName = newField[i].name
if (theName)
newField[i].name = theName + counter;
newField[i].title = theName + counter;
}
var insertHere = document.getElementById('writeroot');
insertHere.parentNode.insertBefore(newFields, insertHere);
}
window.onload = moreFields;
</script>
这是自动完成的输入和脚本:
<input title="autocomplete" name="autocomplete">
<script>
$("[title^='autocomplete']").autocomplete({
source: ["...many values..."]
});
</script>
我正在使用来自 jqueryui.com 的 jQuery UI Autocomplete 1.11.4。再说一遍,这个脚本在“readroot”div 之外时有效,但在“readroot”-div 之内时无效。为什么它在“readroot”div 中不起作用?
更新我已按照 pablito.aven 的建议更正了代码。添加其他类型的可搜索列表(例如chosenjs)也可以在“readroot”div 之外工作,但不能在内部工作。自动完成脚本的工作方式如下:
<div id="readroot" style="display: none">
<select name="_name">
<option value="1">1</option>
<option value="2">2</option>
//many more options...
</select>
First text
<input type="text" size="15" name="xyz" /> Second text
<input type="text" size="15" name="xyz2" />
<input type="button" value="Remove trait" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" />
</div>
<input title="autocomplete" name="autocomplete">//input is outside readroot, Works!
<script>
$("[title^='autocomplete']").autocomplete({
source: ["...many values..."]
});
</script>
但是不是这样的:
<div id="readroot" style="display: none">
<select name="_name">
<option value="1">1</option>
<option value="2">2</option>
//many more options...
</select>
First text
<input type="text" size="15" name="xyz" /> Second text
<input type="text" size="15" name="xyz2" />
<input type="button" value="Remove trait" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" />
<input title="autocomplete" name="autocomplete"> //input is inside 'readroot' Does not work :(
</div>
<script>
$("[title^='autocomplete']").autocomplete({
source: ["...many values..."]
});
</script>
【问题讨论】:
标签: javascript jquery html jquery-ui autocomplete