La saisie semi-automatique d'entrée HTML5 dynamiquement à l'aide de datalist & ajax
J'essaie de mettre à jour une entrée dans un formulaire html via datalist par la mise à jour de la datalist lui-même en utilisant jquery, les appels ajax. dans le cas de l'utilisation d'ajax, l'entrée n'affiche pas les options, mais quand je clique dans le champ de saisie de nouveau. l'essai statique de la version sans ajax ne fonctionne pas comme prévu, montrant les options tout en tapant dans le champ de saisie.
Balisage HTML
<form id="formID" class="form-horizontal">
<div class="control-group">
<label class="control-label" for="input">Location</label>
<div class="controls">
<input type="text" list="LIST_CITIES" id="inputCity"
placeholder="Enter your location..">
</div>
</div>
<!-- submit -->
<button type="submit" class="btn">Submit</button>
</form>
<datalist id="LIST_CITIES"></datalist>
sans ajax (fonctionne):
$('.controls').on("input click", "#inputCity", function(e) {
var val = $(this).val();
dataList.empty();
if(val === "" || val.length < 3) return;
if(testObj.results.length) {
for(var i=0, len=testObj.results.length; i<len; i++) {
var opt = $("<option></option>").attr("value", testObj.results[i]['city']);
tempObj[testObj.results[i]['city']] = testObj.results[i]['id'];
dataList.append(opt);
}
}
});
avec ajax (ne fonctionne pas lors de la saisie):
$('.controls').on("input click", "#inputCity", function(e) {
var val = $(this).val();
dataList.empty();
if(val === "" || val.length < 3) return;
$.ajax({
type: "GET",
url: GET_cities,
data: {startswith: val, maxRows: 5},
success:function(data){
if(data.results.length) {
for(var i=0, len=data.results.length; i<len; i++) {
var opt = $("<option></option>").attr("value", data.results[i]['city']);
tempObj[data.results[i]['city']] = data.results[i]['id'];
dataList.append(opt);
}
}
}
});
Vous GET_cities url c'est correct? Votre demande d'aller sur le serveur?
Oui, je reçois les données de formaté similaire à la testobject. La seule différence ist que le deuxième (ajax) solution ne permet pas de montrer les options alors que je suis en tapant dans le champ de saisie
Une solution de contournement a été posté ici : stackoverflow.com/questions/26610752/...
Oui, je reçois les données de formaté similaire à la testobject. La seule différence ist que le deuxième (ajax) solution ne permet pas de montrer les options alors que je suis en tapant dans le champ de saisie
Une solution de contournement a été posté ici : stackoverflow.com/questions/26610752/...
OriginalL'auteur Dominik H | 2013-04-04
Vous devez vous connecter pour publier un commentaire.
"ne fonctionne pas lors de la frappe"
--C'est parce que l'ajax est asynchrone. Donc quand quelqu'un est en train de taper des données dans la zone de saisie, il fait un appel ajax à votre serveur et il ne sera pas en mesure de montrer de sortie jusqu'à ce que la réponse revint. Vous pouvez toujours essayer async:false dans votre appel ajax. Il permet de verrouiller le navigateur jusqu'à ce que votre réponse est venue de retour du serveur, mais il n'est pas une bonne idée.
OriginalL'auteur Saurav Pandit
Vous avez besoin de le faire:
Supprimer
et remplacer:
avec:
et d'ajouter:
pour moi ça fonctionne!
OriginalL'auteur Bogdan Lewis
Vous pouvez essayer des setInterval et clearInterval.
Par exemple:
OriginalL'auteur Steel Brain