2010-07-28 14 views
6

Estoy definiendo la función func1(); quiero que tomar algún parámetro (s), es decir,llamando a la función definida por el usuario con los parámetros

var func1(aaa, bbb){ 
//do something, anything! 
}; 

entonces quiero llamar más tarde en el doc algo como esto:

$('#some_id').click(func1($this)); 

pero no su trabajo.

He estado jugando con esto por un tiempo, pero es muy extraño la forma en que jquery/javascript maneja al menos las funciones definidas por el usuario. ¿Puede alguien1 proporcionarme un fragmento de código simple? Thx

+0

mientras estás aquí, por favor no se olvide de aceptar correcta respuesta .. aplausos :) – Reigel

+1

Ver: http://stackoverflow.com/questions/2316158/jquery-how-do-you-pass-this-as-function-parameter/2316194#2316194 – deceze

Respuesta

6

Si todo lo que desea pasar es $(this), no es necesario el parámetro, ya que estará disponible dentro de la función definida.

$('#some_id').click(func1); 

Sin embargo, no se puede añadir parámetros de la siguiente manera:

$('#some_id').click(func1(param1, param2)); 

Entonces, para su definición de la función, sólo hay

function func1() { } 

Si quieres parámetros distintos a $ (esto), tendrá que hacer lo siguiente:

$('#some_id').click(function() { 
    func1(aaa, bbb); }); 
+2

El valor de 'this' will no referencia el elemento cuando llamas 'func1' de esa manera. – user113716

+0

@patrick, espero que no se esté refiriendo a '$ ('# some_id'). Haga clic en (func1);' porque sí ... – Reigel

+0

@Reigel - Debería haber sido más claro. Cuando dije "llame a' func1' así "me refería a llamarlo desde el interior de la función anónima en el último ejemplo. Pienso en el primer ejemplo como * passing * 'func1'. – user113716

1

Debe ser

function func1(aaa, bbb) { ... } 
1

Aquí está un ejemplo rápido:

Asegúrese de definir su función con function. Luego, cuando desee llamar desde dentro de jQuery, you should use an inline function within click().

<div>Click Me!</div> 
<div>Pick this one!</div> 
<script type="text/javascript"> 
function func1(aaa, bbb) 
{ 
    alert('You clicked the DIV that said: "' + aaa.innerHTML + '" and ' + bbb); 
};   
$('div').click(function() 
{ 
    func1(this, "that's ok."); 
}); 
</script>   
0

No puede hacerlo como $('#some_id').click(func1($this)); debido a .click(handler(eventObject)) definición ... si lo llama así, $this en func1($this) se esperaría como eventObject.

para esto, puede usar .bind() y event.data.

demo

por ejemplo ..

function sum(event) { 
    alert(event.data.x + event.data.y); 
    // `this` here would refer to the element calling this function 
    // for example, $(this).attr('id') would return `someID` if called below 
} 

llaman como

$('#someID').bind('click',{x:4, y:5}, sum); 
5

Asumo que está tratando de asegurarse de que this aún hace referencia al elemento que ha recibido el evento.

Pruébelo:http://jsfiddle.net/jKM9s/

$('#some_id').click(function() { 
    func1.call(this, 'somearg', 'somearg'); 
}); 

    // now "this" references the element when func1 is called 
function func1(aaa, bbb){ 
    //do something, anything! 
}; 

EDIT:

Si todo lo que quería era referencia al elemento se hace clic, a continuación, ver @ primera solución de phoffer.

+0

Estoy de acuerdo en que solo depende de lo que el OP tenga la intención de hacer. Desafortunadamente, parece haberse olvidado de volver a ella. –

+0

@phoffer - Sí, eso sucede con demasiada frecuencia. Un grupo de personas ansioso por ayudar, pero sin interacción. Probablemente no esté acostumbrado a obtener respuestas tan rápido. – user113716

+0

Tienes razón. Lo que intento hacer si hago una pregunta es asegurarme de estar libre durante la próxima hora, solo con el propósito de interactuar. Cuando todos trabajan juntos, este sitio es increíble. –

0

En Javascript, no puede asignar una función y pasar argumentos al mismo tiempo. Utilizar una función anónima ...

$('#some_id').click(function() { 
    var arg1 = $(this); 
    var arg2 = 'whatever'; 

    return func1(arg1, arg2); 
}); 

Si el único parámetro que necesita es this, asignar la referencia de funciones ...

$('#some_id').click(func1); 
+0

No sé cuál es el mejor uso para el regreso allí ... ¿Supongo que es cierto o falso? – Reigel

+0

Al devolver 'false' se cancela el evento click. Útil para cuando necesita hacer la validación (evitar una redirección). –

Cuestiones relacionadas