我正在使用jQueryUI自动完成功能,我已经将一个函数映射到选择事件上了,例如:
$("#someId").autocomplete({
source: someData,
select: function (event, ui) { ... },
focus: function (event, ui) { ... }
});
我有一个特殊情况:用户已经在自动完成下拉框中选定了一个项目(但未选择它),我需要从另一个函数手动触发选择事件。这可能吗?如果可以,怎么做?
我正在使用jQueryUI自动完成功能,我已经将一个函数映射到选择事件上了,例如:
$("#someId").autocomplete({
source: someData,
select: function (event, ui) { ... },
focus: function (event, ui) { ... }
});
我有一个特殊情况:用户已经在自动完成下拉框中选定了一个项目(但未选择它),我需要从另一个函数手动触发选择事件。这可能吗?如果可以,怎么做?
以下是对我有效的方法:
$(this).data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}});
您可以这样做:
$("#someId").trigger("autocompleteselect");
setAutocomplete("#txt_User_Name","rohit");
function setAutocomplete(autocompleteId,valuetoset)
{
$(autocompleteId).val(valuetoset);
$(autocompleteId).autocomplete("search", valuetoset);
var list = $(autocompleteId).autocomplete("widget");
$(list[0].children[0]).click();
}
$('#search-term').autocomplete('search', 'searching term');
$('#search-term').autocomplete('search');
$('#search-term').autocomplete({
...
minLength: 0, // with this setting
...
});
$('#someId').data('uiAutocomplete')._trigger('select');
一行代码解决方案
$('.ui-menu-item .ui-corner-all:contains(\"123")').autocomplete({autoFocus:true}).mouseenter().click()
.mouseenter().click()
帮助我正确从结果中选择了一个项目。 - Luksurious来自外部:
$($('#someId').data('autocomplete').menu.active).find('a').trigger('click');
一个示例,如何在“打开”自动完成事件内部设置按下水平箭头键时触发选择:
$('#someId').autocomplete({
open: function(event, ui) {
$(this).keydown(function(e){
/* horizontal keys */
if (e.keyCode == 37 || e.keyCode == 39) {
$($(this).data('autocomplete').menu.active).find('a').trigger('click');
}
});
}
});
很不幸,我在 Chromium 140.0.835.200 上尝试了这种被标记为“成功”的解决方法,但并没有奏效。
$(this).data('ui-autocomplete').options.select(event, ui);
这个我在哪里使用
/**
* The jQuery UI plugin autocomplete
*/
$.widget( "ui.autocomplete", $.ui.autocomplete, {
options: {
close: function( event, ui ) {
if (typeof event.currentTarget == 'undefined') {
$(this).val("");
$(this).data('ui-autocomplete').options.select(event, ui);
}
}
}
});
我在寻找一种方法来预填一些jQuery UI自动完成字段的表单,让用户能够修改已经提交的。
首先,我必须加载表单,使用自动完成的某些输入。
问题1:我创建了一个PHP函数,能够调用预制的自动完成输入,指定一些事情,如输入类、ID、名称……和值。我还可以传递JS自定义函数的名称来触发(带有选定项的ID作为参数),具体取决于表单和数据类型…所以当加载表单时,我不能只“打印”预填充的输入,因为自定义函数(和内置的select: function(事件,ui){…}中指定的其他操作)不会触发。我真的需要模仿搜索 -> 点击操作。
问题2:源来自执行从输入中输入的字符串进行搜索的ajax调用。然后显示字符串作为项目……但我想让实际输入成为那些来源的ID。为此,select:事件创建一个带有所点击项目的ID的隐藏输入,并检查它是否已被选择(我可以从一个自动完成输入中选择多个元素..),等等。它必须被触发。
我真的需要模仿搜索 -> 点击操作。
问题3:由于源自ajax调用,我必须进行所有这些调用来预填表单,这是一种非常糟糕的填充表单的方式(出于各种原因)。 我无法真正模拟搜索->点击操作。foreach (values to prefill..) {
$("#'.$mot_cle.'_input_autocomplete_prefill").val("'.$valeur_finale_unique['value'].'");
$("#'.$mot_cle.'_input_autocomplete_prefill").autocomplete("search", "'.$valeur_finale_unique['value'].'");
var list = $("#'.$mot_cle.'_input_autocomplete_prefill").autocomplete("widget");
$(list[0].children[0]).click();
}
这有点复杂。但最终,每当我想在页面中显示自动完成输入时,我只需要调用包装它的 PHP 函数 ;) 而且它非常快速,并且不会干扰整个表单管理的输入 ID\名称...
后端有很多事情要处理,但最终,当我输入这个时,它看起来像这样:
<div class="marge">
<span class="texte_gras">Demandeur(s)</span><br>
'.formulaire_autocomplete("demandeurs","pdrh_formulaire_ajouter_cible_valeurs","1","usager",$valeur_demandeur,"").'
</div>
PHP函数formulaire_autocomplete($keyword(用于输入名称),$class(用于在提交表单时使用jquery序列化),$multi(可以输入多个选择项),$type(要搜索的数据库表:用户,课程等),$value(如果是已提交的表单,则为预填充表单中此输入的ID),$function(如果我想在选择时触发自定义JS函数:))
我得到了这个:
<div class="marge">
<span class="texte_gras">Demandeur(s)</span><br>
<input style="width: 90%;" class="pdrh_formulaire_ajouter_cible_valeurs ui-autocomplete-input" type="text" name="demandeurs[]" id="demandeurs_input_autocomplete" value="" autocomplete="off"> <input style="width: 90%; display: none;" class="pdrh_formulaire_ajouter_cible_valeurs ui-autocomplete-input" type="text" name="demandeurs_prefill[]" id="demandeurs_input_autocomplete_prefill" value="" autocomplete="off"> <div id="demandeurs_boite_autocomplete_selection" style="width: 100%;"><div style="width: 100%;" id="demandeurs_auto_ID_25434"><div class="petite_marge"><input style="width: 80%;" class="pdrh_formulaire_ajouter_cible_valeurs" type="hidden" name="demandeurs_auto_ID[]" id="demandeurs_input_autocomplete_auto_id_25434" value="25434"><span class="petit_texte texte_gras">STEPHANIE (41263)</span><div class="bouton_transparent" onclick="effacer_div('demandeurs_auto_ID_25434')"><div class="petite_marge"><img src="./images/vide.png" style="width: 1em;"><img src="./images/effacer.png" style="width: 1em;"></div></div></div></div><div style="width: 100%;" id="demandeurs_auto_ID_18760"><div class="petite_marge"><input style="width: 80%;" class="pdrh_formulaire_ajouter_cible_valeurs" type="hidden" name="demandeurs_auto_ID[]" id="demandeurs_input_autocomplete_auto_id_18760" value="18760"><span class="petit_texte texte_gras">MARIE (23673)</span><div class="bouton_transparent" onclick="effacer_div('demandeurs_auto_ID_18760')"><div class="petite_marge"><img src="./images/vide.png" style="width: 1em;"><img src="./images/effacer.png" style="width: 1em;"></div></div></div></div></div><script>
$("#demandeurs_input_autocomplete").autocomplete({
source: function (request, response) {
requete_ajax = $.ajax({
type: "POST",
url: 'fonctions.php',
data: 'recherche_autocomplete=usager&chaine='+request.term,
dataType: 'json',
success: function(data) {
ajax_en_cours = 0; console.log("Ajax terminé");
// var resultat = JSON.parse(data.choix);
var tableau_resultat = Object.values(data.choix);
response(tableau_resultat);
console.log(tableau_resultat);
},
error: function(e) {
ajax_en_cours = 0; console.log("Ajax terminé");
console.log('Erreur | demandeurs recherche autocomplete');
}
});
},
minLength: 3,
select: function( event, ui ) {
$("#demandeurs_input_autocomplete_auto_id").val(ui.item.ID);
var contenu_selection = $("#demandeurs_boite_autocomplete_selection").html();
$("#demandeurs_boite_autocomplete_selection").html(contenu_selection+"<div style=\"width: 100%;\" id=\"demandeurs_auto_ID_"+ui.item.ID+"\"><div class=\"petite_marge\"><input style=\"width: 80%;\" class=\"pdrh_formulaire_ajouter_cible_valeurs\" type=\"hidden\" name=\"demandeurs_auto_ID[]\" id=\"demandeurs_input_autocomplete_auto_id_"+ui.item.ID+"\" value=\""+ui.item.ID+"\"><span class=\"petit_texte texte_gras\">"+ui.item.value+"</span><div class=\"bouton_transparent\" onclick=\"effacer_div('demandeurs_auto_ID_"+ui.item.ID+"')\"><div class=\"petite_marge\"><img src=\"./images/vide.png\" style=\"width: 1em;\"><img src=\"./images/effacer.png\" style=\"width: 1em;\"></div></div></div></div>");
$("#demandeurs_input_autocomplete").val(" ");
}
});
var valeurs_prefill = [{value: "STEPHANIE (41263)", ID: "25434"},{value: "MARIE (23673)", ID: "18760"}];
$("#demandeurs_input_autocomplete_prefill").autocomplete({
source: valeurs_prefill,
minLength: 3,
select: function( event, ui ) {
$("#demandeurs_input_autocomplete_auto_id").val(ui.item.ID);
var contenu_selection = $("#demandeurs_boite_autocomplete_selection").html();
$("#demandeurs_boite_autocomplete_selection").html(contenu_selection+"<div style=\"width: 100%;\" id=\"demandeurs_auto_ID_"+ui.item.ID+"\"><div class=\"petite_marge\"><input style=\"width: 80%;\" class=\"pdrh_formulaire_ajouter_cible_valeurs\" type=\"hidden\" name=\"demandeurs_auto_ID[]\" id=\"demandeurs_input_autocomplete_auto_id_"+ui.item.ID+"\" value=\""+ui.item.ID+"\"><span class=\"petit_texte texte_gras\">"+ui.item.value+"</span><div class=\"bouton_transparent\" onclick=\"effacer_div('demandeurs_auto_ID_"+ui.item.ID+"')\"><div class=\"petite_marge\"><img src=\"./images/vide.png\" style=\"width: 1em;\"><img src=\"./images/effacer.png\" style=\"width: 1em;\"></div></div></div></div>");
$("#demandeurs_input_autocomplete").val(" ");
}
});
$("#demandeurs_input_autocomplete_prefill").val("STEPHANIE (41263)");
$("#demandeurs_input_autocomplete_prefill").autocomplete("search", "STEPHANIE (41263)");
var list = $("#demandeurs_input_autocomplete_prefill").autocomplete("widget");
$(list[0].children[0]).click();
$("#demandeurs_input_autocomplete_prefill").val("MARIE (23673)");
$("#demandeurs_input_autocomplete_prefill").autocomplete("search", "MARIE (23673)");
var list = $("#demandeurs_input_autocomplete_prefill").autocomplete("widget");
$(list[0].children[0]).click();
</script>
</div>
$(this).data('autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}});
。 - Ian Warburton