Pregunta:
Tengo un campo de autocompletar en un formulario personalizado que funciona y devuelve un valor separado por tubería que luego quiero dividir e insertar en los campos de formulario apropiados. Por ejemplo, el campo de autocompletar devuelve 'Último | Primero | ID' como 'Smith | John | 123456789' y quiero asignar estos valores a otros campos de formulario y reemplazar el valor actual del campo de autocompletar con el apellido.
Obtuve con éxito la identificación y el nombre para completar con jquery, pero el apellido en el campo de autocompletar NO CAMBIARÁ.
Algunas observaciones: si primero advierto el valor del campo, cambia. Es como si el script se estuviera ejecutando demasiado rápido y se saltara el paso para establecer el valor del campo de autocompletar. También parece funcionar con otras activaciones de eventos en lugar de .change, como .blur o .keyup, pero la cuestión es que necesito que sea .change o de lo contrario no funcionará en todos los casos.
Aquí está mi código jquery:
$('#edit-emp-lname').change( function () {
var empName = $(this).val();
//alert($(this).val());
var empArray = empName.split("|");
//The following line is basically ignored. All other following lines work successfully.
$(this).val(empArray[0]);
$('input[name="emp_fname"]').val(empArray[1]);
$('input[name="emp_uid"]').val(empArray[2]);
});
Actualización Para que esto funcione correctamente y en IE para arrancar, tuve que hacer un código adicional, que se muestra a continuación:
$('#edit-emp-lname').change(function() { doChange(); }).attr("onchange", function() { doChange(); }).blur( function() { doChange(); });
function doChange() {
var empName = $('#edit-emp-lname').val();
var empArray = empName.split("|");
setTimeout( function () {
$('#edit-emp-lname').val(empArray[0]);
}, 10);
$('#edit-emp-fname').val(empArray[1]);
$('#edit-emp-uid').val(empArray[2]);
}
Respuesta:
Si quiero mostrar en autocompletar todo este campo, usaré hook_form_alter Cambiaré el valor de autocompletar con otra función, así que esto es lo que haré
function hook_form_alter() {
$form['field_selectedarticles']['und'][0]['nid']['#autocomplete_path'] = 'autocomplete/filteration';
}
function autocomplete_filteration($string) {
//select * fields I want
print drupal_json_output($items);
}