我有以下代码,我想要做的是设置一个自动填充输入框,填写完成后,在其下面创建另一个自动填充输入框。
我的代码存在问题 因为我使用模糊,它会创建 每次点击时都会输入一个新输入 第一个。
第二个问题是 我需要设置自动完成功能 在新创建的输入框上,但是 如果我递归地做,那么它会 崩溃。
代码:
function setupAutoComplete()
{
var autoCompleteData = $("#listContacts").html().split("<br>");
//autoCompleteData = replaceAll(autoCompleteData, "<", "<");
//autoCompleteData = replaceAll(autoCompleteData, ">", ">");
$("[name|=toemail[]]").autocomplete(autoCompleteData);
$("[name|=toemail[]]").result(function(event, item) {
$("[name|=toemail[]]").blur();
});
$("[name|=toemail[]]").blur(function(){
var newString = $(this).val();
newString = replaceAll(newString, "<", "<");
newString = replaceAll(newString, ">", ">");
$(this).val(newString);
var newfield = '<p><label class="" disabled="true"><select name="toSelect[]"><option>To: </option><option>CC: </option><option>BCC: </option></select></label><input type="text" value="" name="toemail[]" /></p>';
$("#composeTo").append(newfield);
});
}
答案 0 :(得分:1)
不是将元素的自动完成设置为一个组,而是应该在创建每个元素时单独进行。这将停止递归。
其次,为了避免在点击屏幕上的其他位置时触发onblur事件,您应该抓住按键上按下的Tab键。
答案 1 :(得分:0)
发布我自己的解决方案。
function setupAutoComplete()
{
var autoCompleteData = $("#listContacts").html().split("<br>");
$("[name|=toemail[]]").each(function(key, value) {
if (!($(this).hasClass("blurred")))
{
$(this).autocomplete(autoCompleteData);
$(this).result(function(event, item) {
var newString = $(this).val();
newString = replaceAll(newString, "<", "<");
newString = replaceAll(newString, ">", ">");
$(this).val(newString);
$(this).blur();
});
$(this).blur(function(){
if (!($(this).hasClass("blurred")))
{
var newfield = '<p><label class="" disabled="true"><select name="toSelect[]"><option>To: </option><option>CC: </option><option>BCC: </option></select></label><input type="text" value="" name="toemail[]" /></p>';
$("#composeTo").append(newfield);
setupAutoComplete();
$(this).addClass("blurred");
}
});
}
});