Tengo un cuadro de texto de autocompletar que necesita para responder a eventos: 2jQuery autocompletado
- Cuando el usuario ha terminado de escribir algo en el cuadro de texto (Actualmente estoy usando
focusout
asumir cuando se realiza el usuario Por lo tanto, si un usuario saca pestañas de un cuadro de texto, significa que el usuario ha terminado de escribir. - Cuando el usuario selecciona un elemento en la lista de autocompletar de valores (estoy usando el evento autocompletar
select
para determinarlo)
El problema:
Cuando el usuario selecciona un elemento de la lista de autocompletar de los valores, la cadena de evento es tal que focusout
se llama primero, entonces el select
. Cuando estoy en focusout
, solo tengo acceso a lo que escribió el usuario, no a lo que el usuario seleccionó de la lista de valores de autocompletar, y eso es lo que realmente necesito. ¿Cómo resuelvo este problema?
Pasos para reproducir el problema:
- En el cuadro de texto, escriba la letra
a
ActionScript
Seleccione de la lista de autocompletar de los valorescuenta los mensajes de console.debug:
focusout event called a select event called ActionScript
Aquí está el código:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<title>Data Matching</title>
</head>
<body>
<form>
<input id="1" type="text"></input>
<input id="2" type="submit"></input>
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>
$('#1').autocomplete(
{
select: function (event, ui)
{
"use strict";
console.debug('select event called');
console.debug(ui.item.value);
},
source: ["ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"],
minLength: 1
});
$('#1').focusout(function()
{
"use strict";
console.debug('focusout event called');
console.debug($(this).attr('value')); // At this point, I need the value that was selected from autocomplete. I only get the value that the user typed, though
});
</script>
</body>
</html>
Esto funcionó. Me deshice del controlador de eventos 'focusout'. Gracias. – StackOverflowNewbie
Impresionante, me alegra ayudarte. –
Además, recuerde aceptar la respuesta si ayudó ':)' –