jQuery 自动完成多个输入,每个输入都有唯一的数组
jQuery autocomplete multiple input, each with unique array
我注意到有人针对多个输入框询问了这个问题,但是当每个输入框必须有一个唯一的单词数组时呢?
我正在尝试使用 jQuery 自动完成插件将函数附加到多个输入,每个输入都有一个唯一的单词数组。该数组由本地跨度内附近输入中的文本填充。每个跨度都有一个具有不同值的输入来填充数组,以及一个用于自动完成的输入。
该函数仅使用最后填充的数组,而不是当前已分配给自动完成的数组。
这是输出的 html:
<?php
foreach($caseanswers as $key=>$answer){
if($answer['input_req']===$term['input_req']){
echo '<span class="answer">
<textarea class="answertext" id="answer'.$answer['id'].'" disabled>'.$answer['answer'].'</textarea>
<div class="ui-widget"><textarea class="autocomplete"></textarea></div>
<br/><input type="button" onclick=RUDanswer(this) value="Edit"><input type="button"onclick=RUDanswer(this) value="Delete"></span><br/>';
}
}
?>
这是 jQuery 代码(它已经在 jquery 包装器中,被遗漏了)
<script>
$(".autocomplete").each(function(){
//alert($(this).val());
acompletebox=$(this);
function split(val){
return val.split(/\s/);
}
function extractLast(term){
return split(term).pop();
}
availableTags=acompletebox.parents('span.answer').find('.answertext').val().split(" ");
// acompletebox.parents('span.answer').find('.answertext').val().split(" ");
// console.log(availableTags);
// don't navigate away from the field on tab when selecting an item
$(this).on("keydown", function(event){
if(event.keyCode===$.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active){
event.preventDefault();
}
})
$(this).autocomplete({
// availableTags=acompletebox.parents('span.answer').find('.answertext').val().split(" ");
minLength: 3, source: function(request, response){
//delegate back to autocomplete, but extract the last term
response($.ui.autocomplete.filter(availableTags, extractLast(request.term)));
},
focus:function(){
//prevent value inserted on focus
return false;
},
select:function(event, ui){
var terms=split(this.value);
//remove the current input
terms.pop();
//add the selected item
terms.push(ui.item.value);
//add placeholder to get the comma-and-space at the end
terms.push("");
this.value=terms.join(" ");
return false;
}
});
});
</script>
我想问题是,如何为每个输入分配一个唯一数组的自动完成数据源?
感谢您对这些精明的业余爱好编码员的帮助!
尽管不理想,.each() 函数可以替换为 .focus 或 select 上的其他函数。每次发生悬停时,它都必须重新编译列表,如果数据来自外部来源,这在计算上可能会很昂贵,但是它可以通过这个简单的更改运行。
我注意到有人针对多个输入框询问了这个问题,但是当每个输入框必须有一个唯一的单词数组时呢?
我正在尝试使用 jQuery 自动完成插件将函数附加到多个输入,每个输入都有一个唯一的单词数组。该数组由本地跨度内附近输入中的文本填充。每个跨度都有一个具有不同值的输入来填充数组,以及一个用于自动完成的输入。 该函数仅使用最后填充的数组,而不是当前已分配给自动完成的数组。
这是输出的 html:
<?php
foreach($caseanswers as $key=>$answer){
if($answer['input_req']===$term['input_req']){
echo '<span class="answer">
<textarea class="answertext" id="answer'.$answer['id'].'" disabled>'.$answer['answer'].'</textarea>
<div class="ui-widget"><textarea class="autocomplete"></textarea></div>
<br/><input type="button" onclick=RUDanswer(this) value="Edit"><input type="button"onclick=RUDanswer(this) value="Delete"></span><br/>';
}
}
?>
这是 jQuery 代码(它已经在 jquery 包装器中,被遗漏了)
<script>
$(".autocomplete").each(function(){
//alert($(this).val());
acompletebox=$(this);
function split(val){
return val.split(/\s/);
}
function extractLast(term){
return split(term).pop();
}
availableTags=acompletebox.parents('span.answer').find('.answertext').val().split(" ");
// acompletebox.parents('span.answer').find('.answertext').val().split(" ");
// console.log(availableTags);
// don't navigate away from the field on tab when selecting an item
$(this).on("keydown", function(event){
if(event.keyCode===$.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active){
event.preventDefault();
}
})
$(this).autocomplete({
// availableTags=acompletebox.parents('span.answer').find('.answertext').val().split(" ");
minLength: 3, source: function(request, response){
//delegate back to autocomplete, but extract the last term
response($.ui.autocomplete.filter(availableTags, extractLast(request.term)));
},
focus:function(){
//prevent value inserted on focus
return false;
},
select:function(event, ui){
var terms=split(this.value);
//remove the current input
terms.pop();
//add the selected item
terms.push(ui.item.value);
//add placeholder to get the comma-and-space at the end
terms.push("");
this.value=terms.join(" ");
return false;
}
});
});
</script>
我想问题是,如何为每个输入分配一个唯一数组的自动完成数据源?
感谢您对这些精明的业余爱好编码员的帮助!
尽管不理想,.each() 函数可以替换为 .focus 或 select 上的其他函数。每次发生悬停时,它都必须重新编译列表,如果数据来自外部来源,这在计算上可能会很昂贵,但是它可以通过这个简单的更改运行。