2012-01-27 9 views
5

Tengo un marcador de fecha con un controlador de eventos onSelect. Más adelante en mi programa, quiero agregar otros controladores de selección. El problema es que borran al primero. (Fiddle.)Cómo agregar manejadores de eventos adicionales a una instancia jquery-ui datepicker?

¿Cómo puedo agregar controladores adicionales sin hacer eso?

+1

parece que esto se ha hecho antes: http://stackoverflow.com/q/2241725/1030169 – jmoerdyk

+0

pensé que iba a ser, pero no lo encontré, gracias. – sprugman

Respuesta

1

Puede mantener sus llamadas deseadas en una matriz;

var firstHandler = function(dateText, inst) { 
    console.log('Original Handler', dateText, inst); 
}; 

var secondHandler = function(dateText, inst) { 
    console.log('Second Handler', dateText, inst); 
}; 

$('#datepicker').datepicker({ 
    onSelect: function() { 
     var sinks = $(this).data("mySelects"); 
     for (var i = 0; i < sinks.length; i++) 
      sinks[i].apply(this, arguments); 
    } 
}).data("mySelects", [firstHandler]); 

$('#addBtn').click(function(event) { 
    $('#datepicker').data('mySelects').push(secondHandler); 
    $('#datepicker').data('mySelects').push(nthHandler); 
}); 
+0

Gracias. Acabo de terminar de codificar eso cuando vi el comentario anterior. Creo que la solución vinculada es un poco más elegante. Actualización: en realidad, su versión es más elegante que la mía. Hmm ... – sprugman

+0

Esta solución funciona bien en varias situaciones (en cambio, la solución vinculada no funciona si, en el primer controlador, hay una variable que proviene del contexto del primer controlador). ¿Dónde puedo encontrar documentación que me explique la solución? No puedo entender, por ejemplo, la variable de argumentos. –

+0

'.apply (this, arguments)' llama a la función en 'sink []' asegurándose de que 'this' sea correcto en el controlador. También pasa el objeto 'arguments' para transmitir todos los argumentos que' onSelect' recibió originalmente ('dateText' y' inst'). https: // developer.mozilla.org/es/JavaScript/Reference/Functions_and_function_scope/arguments' –

Cuestiones relacionadas