Sto usando un widget di completamento automatico e vorreiuna finestra di dialogo per mostrare quando un oggetto è selezionato. La finestra di dialogo appare, ma voglio che un campo nella finestra di dialogo riceva il focus quando si apre. Ecco cosa ho provato finora:
// HTML
<form action="#">
<p><input id="busca" /></p>
</form>
<div id="agregar" title="Agregar Parte">
<label for="cantidad">Cantidad:</label>
<input name="cantidad" id="cantidad" size="3" />
</div>
// jquery
$(function(){
$("#agregar").dialog({
autoOpen: false,
//also tried open: function(){$("#cantidad").focus()}
}
);
//.bind("dialogfocus", ... ) does not work either
$("#agregar").bind("focus", function(){
$("#cantidad").focus(); });
$("#busca").autocomplete({
source: "/carrito/autocomplete/",
minLength: 1,
select: function(e, ui) {
$("#agregar").dialog("open");
}
});
});
Penso che il comportamento predefinito di AutoSelect stia ancora facendo qualcosa mentre il widget di selezione automatica riceve lo stato attivo dopo che la finestra di dialogo è stata mostrata.
Qualsiasi aiuto sarebbe molto apprezzato.
risposte:
1 per risposta № 1Prova a sovrascrivere il comportamento del completamento automatico:
$("#agregar").dialog({
autoOpen: false,
open: function(){
setTimeout(function() { $("#cantidad").focus(); }, 0);
}
});
Questo fa la coda al .focus()
per funzionare dopo che il codice selezionato è stato eseguito. Questo è ciò che sta facendo il completamento automatico (direttamente dal codice sorgente, riga 604): chiama la tua selezione (e quella funzione aperta), quindi ruba il focus indietro:
select();
// TODO provide option to avoid setting focus again after selection?
// useful for cleanup-on-focus
input.focus();