2011-09-22 16 views
6

Estoy atascado. Buscado y probado por horas.¿Cómo llamar a la función javascript con el parámetro en el controlador de eventos jquery?

EDITAR: Todavía no puedo hacer que funcione. De acuerdo, solo pondré el código fuente para dejar en claro lo que quiero lograr.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    var date_fmt="yyyy-mm-dd"; 
    var time_fmt="HH:MM"; 
    var date_field="#id_start_0, #id_end_0"; //id refering to html input type='text' 
    var time_field="#id_start_1, #id_end_1"; //id refereing to html input type='text' 


    function clearFmt(fmt_type) 
    { 
     if($(this).val() == fmt_type) { 
      $(this).val(""); 

     } 
    } 

    function putFmt(fmt_type) 
    { 
     if($(this).val() == "") { 
      $(this).val(fmt_type); 
     } 
    } 


$(document).ready(function() { 

    $(date_field).attr("title",date_fmt); 
    $(time_field).attr("title",time_fmt); 

    $(date_field).click(function() { 
     clearFmt(date_fmt); 
    }); 

    $(date_field).blur(function(){ 
     putFmt(date_fmt); 
    }); 

    $(time_field).click(function(){ 
     clearFmt(time_fmt); 
    }); 

    $(time_field).blur(function(){ 
     putFmt(time_fmt); 
    }); 

}); 
</script> 

¿Ayuda?

+0

Desea que myFunc se evalúe en tiempo de clic frente a instanciación, ¿correcto? –

Respuesta

8

Utilice el método jQuery bind:

function myfunc(param) { 
    alert(param.data.key); 
} 

$(document).ready(function() { 
    $("#foo").bind('click', { key: 'value' }, myfunc); 
}); 

También vea mi jsfiddle.

ACTUALIZACIÓN === ===

ya que jQuery 1.4.3 también se puede utilizar:

function myfunc(param) { 
    alert(param.data.key); 
} 

$(document).ready(function() { 
    $("#foo").click({ key: 'value' }, myfunc); 
}); 

También vea mi segundo jsfiddle.

ACTUALIZACIÓN === === 2

Cada función tiene su propia this. Después de llamar al clearFmt en esta función, this ya no es el elemento al que se hace clic. Tengo dos soluciones similares:

En sus funciones, agregue un parámetro llamado p. Ej. element y reemplace $(this) con element.

function clearFmt(element, fmt_type) { 
    if (element.val() == fmt_type) { 
     element.val(""); 
    } 
} 

Llamar a la función que tiene que agregar el parámetro $(this).

$(date_field).click(function() { 
    clearFmt($(this), date_fmt); 
}); 

También vea mi third jsfiddle.

- = -

Una alternativa:

function clearFmt(o) { 
    if ($(o.currentTarget).val() == o.data.fmt_type) { 
     $(o.currentTarget).val(""); 
    } 
} 
$(date_field).click({fmt_type: date_fmt}, clearFmt); 

Véase también mi fourth jsfiddle.

+0

@mhd Gracias por su actualización, también he actualizado mi respuesta. – scessor

+0

¡Muchas gracias! Yo uso tu tercera solución jsfiddle. – mhd

3

El siguiente debería funcionar como se ve en este live demo:

function myfunc(bar) { 
    alert(bar); 
} 

$(function() { 
    $("#foo").click(function() { 
     myfunc("value"); 
    }); 
}); 
0
function myfunc(e) { 
    alert(e.data.bar); //this is set to "value" 
} 

$("#foo").click({bar: "value"}, myfunc); 
0
anyFunctionName = (function() 
{ 
    function yourFunctionName1() 
    { 
     //your code here 
    } 

    function yourFunctionName2(parameter1, param2) 
    { 
     //your code here 
    } 

    return 
    { 
     yourFunctionName1:yourFunctionName1, 
     yourFunctionName2:yourFunctionName2 
    } 
})(); 

$document.ready(function() 
{ 
    anyFunctionName.yourFunctionName1(); 
    anyFunctionName.yourFunctionName2(); 
}); 

Nota: si no utiliza 'anyFuctionName' para declarar cualquier función, entonces no es necesario el método de devolución. simplemente escriba su función simplemente como, yourFunctionName1().

en el parámetro $ document.ready section no es un problema. usted acaba de poner su nombre de función aquí. si usa la función 'anyFuctionName', entonces debe seguir el formato anterior.

0

La gente está haciendo este complicado, simplemente llame directamente como lo haría en Javascript

myfunc ("valor");

Cuestiones relacionadas