2009-08-28 15 views
9

Come posso chiamare una funzione jQuery da javascript?chiama la funzione Jquery da javascript

//jquery 
$(function() { 

     function my_fun(){ 
       /.. some operations ../ 
     } 
}); 

//just js 
function js_fun() { 

     my_fun(); //== call jquery function 
} 
+1

Basta chiami? In particolare, con cosa stai avendo problemi? –

+0

Stai provando a creare un plug-in jQuery, cioè che vuoi che la tua funzione sia disponibile come $ (foo) .your_function()? – JorenB

+5

Sta peggiorando sempre di più questa cosa jQuery contro JavaScript. –

risposta

14

Non è possibile.

function(){ 

    function my_fun(){ 
      /.. some operations ../ 
    } 
} 

Quella è una chiusura. my_fun() è definito solo all'interno di quella funzione anonima. Puoi chiamare lo my_fun() solo se lo dichiari al livello di ambito corretto, cioè a livello globale.

$(function() {/* something */}) è un IIFE, il che significa che viene eseguito immediatamente quando il DOM è pronto. Dichiarando my_fun() all'interno di quella funzione anonima, si impedisce al resto dello script di "vederlo".

Naturalmente, se si desidera eseguire questa funzione quando il DOM è a pieno carico, si dovrebbe effettuare le seguenti operazioni:

function my_fun(){ 
    /* some operations */ 
} 

$(function(){ 
    my_fun(); //run my_fun() ondomready 
}); 

// just js 
function js_fun(){ 
    my_fun(); //== call my_fun() again 
} 
+0

potresti dirmi come dichiarare la funzione globale in jQuery? Se hai qualche esempio sarebbe meraviglioso. –

+2

In realtà ti ho mostrato un esempio. jQuery è una parte di Javascript. In Javascript definiamo funzioni globali come nel mio esempio (pugno una funzione è dichiarata globalmente). –

+0

Non funziona – Imran

1

funzioni di jQuery sono chiamate proprio come funzioni JavaScript.

Ad esempio, per aggiungere dinamicamente la classe "rossa" per l'elemento del documento con il "orderedlist" id utilizzando la funzione di jQuery addClass:

$("#orderedlist").addClass("red"); 

al contrario di una linea regolare di JavaScript chiamare una funzione regolare :

var x = document.getElementById("orderedlist"); 

addClass() è una funzione jQuery, getElementById() è una funzione JavaScript.

La funzione di segno del dollaro rende disponibile la funzione addClass jQuery.

L'unica differenza è che l'esempio di jQuery chiama la funzione addclass dell'oggetto $ jQuery ("# ​​orderlist") e l'esempio regolare chiama una funzione dell'oggetto documento.

Nel codice

$(function() { 
// code to execute when the DOM is ready 
}); 

viene utilizzato per specificare il codice da eseguire quando il DOM è pronto.

Non differenzia (come si potrebbe pensare) ciò che è "codice jQuery" dal normale codice JavaScript.

Quindi, per rispondere alla tua domanda, basta chiamare le funzioni definite come faresti normalmente.

//create a function 
function my_fun(){ 
    // call a jQuery function: 
    $("#orderedlist").addClass("red"); 
} 

//call the function you defined: 
myfun(); 
0

mio problema era che stavo guardando dalla lunga angolazione:

function new_line() { 
    var html= '<div><br><input type="text" value="" id="dateP_'+ i +'"></div>'; 
    document.getElementById("container").innerHTML += html; 

    $('#dateP_'+i).datepicker({ 
     showOn: 'button', 
     buttonImage: 'calendar.gif', 
     buttonImageOnly: true 
    }); 
    i++; 
} 
0

ho fatta ...

Ho appena scrivere

jQuery('#container').append(html) 

invece

document.getElementById('container').innerHTML += html; 
12

Sì, è possibile (questo è quanto ho capito la domanda originale). Ecco come l'ho fatto. Basta legarlo in un contesto esterno. Ad esempio:

//javascript 

my_function = null; 

//jquery 
$(function() { 

     function my_fun(){ 
       /.. some operations ../ 
     } 
     my_function = my_fun; 
}) 

//just js 
function js_fun() { 
     my_function(); //== call jquery function - just Reference is globally defined not function itself 
} 

ho incontrato questo stesso problema quando si cerca di accedere a metodi dell'oggetto, che è stata istanziata su DOM oggetto solo pronto. Lavori. Il mio esempio:

MyControl.prototype = { 
    init: function { 
     // init something 
    } 
    update: function() { 
      // something useful, like updating the list items of control or etc.   
    } 
} 

MyCtrl = null; 

// create jquery plug-in 
$.fn.aControl = function() { 
    var control = new MyControl(this); 
    control.init(); 
    MyCtrl = control; // here is the trick 
    return control; 
} 

ora si può usare qualcosa di semplice come:

function() = { 
    MyCtrl.update(); // yes! 
} 
0

// funzione javascript si chiama una funzione jquery

// In javascript parte

function js_show_score() 
{ 
    //we use so many javascript library, So please use 'jQuery' avoid '$' 
    jQuery(function(){ 
     //Call any jquery function 
     show_score(); //jquery function 
    });(jQuery); 
} 

// in jQuery parte

jQuery(function(){ 
//Jq Score function  
    function show_score() 
    { 
     $('#score').val("10"); 
    } 
});(jQuery); 
3
<script> 

     // Instantiate your javascript function 
     niceJavascriptRoutine = null; 

     // Begin jQuery 
     $(document).ready(function() { 

      // Your jQuery function 
      function niceJqueryRoutine() { 
       // some code 
      } 
      // Point the javascript function to the jQuery function 
      niceJavaScriptRoutine = niceJueryRoutine; 

     }); 

    </script> 
+0

Bello e facile. Grazie man –

+0

se chiamo niceJavascriptRoutine() ottengo errore - 'niceJavascriptRoutine non è una funzione' :( – Atara

Problemi correlati