2009-12-30 10 views

Respuesta

2

Esta es mi solución con .blur (por otra parte utilizo nombre | pares ID)

jQuery("#username").autocomplete(
    "/yii_app/stock/suggestUser", 
    { 
     'mustMatch':true, 
     'multiple':false, 
     'formatItem':function(result, i, num, term) { 
      return '<small>'+result[1]+'</small>&nbsp;&nbsp;&nbsp;'+ result[0]; 
     } 
    } 
).result(
    function(event,item) { 
     $("#user_id").val(item[1]); 
    } 
).blur(
    function() { 
     $("#user_id").val(''); 
     $(this).search(); 
    } 
); 

user_id es un campo de entrada oculto, nombre de usuario es un campo de entrada de texto resultado Ajax utiliza el siguiente formato: user1name | user1id \ n user2name | user2id \ n

+1

No entiendo cómo algo como esto puede obtener 4 votos ascendentes. La llamada a ".result" ni siquiera pasa el resumen sintáctico en Firefox. Y hay un llamado a "buscar", que aparentemente ni siquiera existe. Muy frustrante. – AKWF

+0

este script simplemente no funciona. ¿Qué es $ .result()? – crab

0

Úselo en combinación con el complemento validation. Simplemente haga el campo required para el complemento de validación.

+0

que no resuelve el problema de envío de contenido no deseado –

1

Utilice la opción:

mustMatch:true, 

Esta es availabl e en el complemento de autocompletado Bassistance. No sé si es parte de la autocompletar jQuery o de la autocompleta de Bassistance, ¡pero funciona!

0

También puede utilizar el construido en enviar evento

$('Autocomplete').autocomplete({ 
      select: function(event, ui) { 
         $('submit').show(); 
        } 
}); 
1

Ésta es mi solución actual utilizando jQuery UI 's autocomplete:

$('#some-input').autocomplete({ 
     source: 'some-url', 
     autoFocus: true, 
     minLength: 2, 
     select: function(event, ui) { 
      //remember the selected item 
      $('#some-input') 
       .data('selected-item', ui.item.label); 
     } 
    }).blur(function() { 
     var value = $('#some-input').val(); 
     //check if the input's value matches the selected item 
     if(value != $('#some-input').data('selected-item')) { 
      //they don't, the user must have typed something else 
      $('#some-input') 
       .val('') //clear the input's text 
       .data('selected-item', ''); //clear the selected item 
     } 
    }); 

Cada vez que se activa el evento desenfoque, el valor de la entrada es verificó haber sido elegido previamente. Si no se ha seleccionado (usted sabe que debido a que el evento seleccionado nunca se activó), la variable 'elemento seleccionado' no coincidirá con el valor de la entrada. Entonces puedes hacer lo que quieras (borro la entrada, pero puedes probar algo más).

+1

Si agrega $ ("# some-input '). Val (ui.item.label); a la llamada de selección, su solución funcionará. – AKWF

4

Puede utilizar "change" event de autocompletar

 var availableTags = [ 
      "ActionScript", 
      "AppleScript" 
     ]; 
     $("#tags").autocomplete({ 
      source: availableTags, 
      change: function (event, ui) { 
       if(!ui.item){ 
        //http://api.jqueryui.com/autocomplete/#event-change - 
        // The item selected from the menu, if any. Otherwise the property is null 
        //so clear the item for force selection 
        $("#tags").val(""); 
       } 

      } 

     }); 
Cuestiones relacionadas