2008-09-07 12 views
7

Intentando hacer un "control" genérico que pueda agregar dinámicamente elementos, pero estoy teniendo problemas para que las funciones funcionen correctamente.JQuery & Objects, tratando de hacer un widget liviano

Esto es lo que comencé.

$select = $("<select></select>"); 
$select.addOption = function(value,text){ 
    $(this).append($("<option></option>").val(value).text(text)); 
}; 

Esto funcionó bien solos pero en cualquier momento $select es .clone(true) 'ed la función addOption() se pierde.

Este es mi enfoque de objeto, pero aún la función no funciona.

function $selectX() { 
    return $("<select></select>"); 
} 

$selectX.prototype.addOption() = function(value,text){ 
    $(this).append($("<option></option>").val(value).text(text)); 
}; 

solución Hack es añadir la función manualmente después de la creación:

$nameSelect= new $selectX; 
$nameSelect.addOption = function(value,text){ 
    $(this).append($("<option></option>").val(value).text(text)); 
}; 

¿Estoy ladrando al árbol equivocado?

Respuesta

7

Para añadir nuevo método para jQuery Es necesario utilizar jQuery.fn.methodName atributo, por lo que en este caso será:

jQuery.fn.addOption = function (value, text) { 
    jQuery(this).append(jQuery('<option></option>').val(value).text(text)); 
}; 

Pero hay que tener en cuenta que este addOption será accesible desde cualquier resultado de $() llamada.

Cuestiones relacionadas