2009-08-28 13 views
9

Jak mogę wywołać funkcję jQuery z javascript?wywoływanie funkcji Jquery z javascript

//jquery 
$(function() { 

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

//just js 
function js_fun() { 

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

Wystarczy nazwać? Z czym konkretnie masz problemy? –

+0

Czy próbujesz utworzyć wtyczkę jQuery - tzn. Chcesz, aby twoja funkcja była dostępna jako $ (foo) .twoja_funkcja()? – JorenB

+5

Coraz gorzej dzieje się to w jQuery versus JavaScript. –

Odpowiedz

14

Nie możesz.

function(){ 

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

To jest zamknięcie. my_fun() jest zdefiniowany tylko wewnątrz tej anonimowej funkcji. Możesz zadzwonić pod numer my_fun(), jeśli zadeklarujesz go na odpowiednim poziomie zasięgu, tj. Globalnie.

$(function() {/* something */}) to IIFE, co oznacza, że ​​wykonuje się natychmiast, gdy DOM jest gotowy. Deklarując my_fun() wewnątrz tej anonimowej funkcji, uniemożliwisz pozostałej części skryptu "zobaczenie go".

Oczywiście, jeśli chcesz uruchomić tę funkcję, gdy DOM jest w pełni załadowany, należy wykonać następujące czynności:

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

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

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

czy możesz mi powiedzieć, jak zadeklarować globalną funkcję w jquery? Jeśli masz jakieś przykłady, byłoby wspaniale. –

+2

Właściwie pokazałem wam przykład. jQuery jest częścią Javascript. W JavaScript definiujemy globalne funkcje jak w moim przykładzie (pierwsza funkcja jest deklarowana globalnie). –

+0

Nie działa – Imran

1

funkcje jQuery nazywane są podobnie jak funkcji JavaScript.

Na przykład, aby dynamicznie dodać „czerwony” klasy do elementu dokumentu z id „orderedlist” Korzystanie z funkcji jQuery addClass:

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

W przeciwieństwie do regularnych linii JavaScript wywołanie zwykłej funkcji :

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

addClass() jest funkcją jQuery, getElementById() jest funkcją JavaScript.

Funkcja znaku dolara udostępnia funkcję jQuery addClass.

Jedyna różnica polega na tym, że przykład jQuery wywołuje funkcję addclass obiektu jQuery $ ("# lista uporządkowana"), a zwykłym przykładem jest wywołanie funkcji obiektu dokumentu.

W kodzie

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

jest używany do określenia kodu podczas DOM jest gotowy.

Nie rozróżnia (jak można sądzić), co to jest "kod jQuery" ze zwykłego kodu JavaScript.

Aby odpowiedzieć na twoje pytanie, po prostu zadzwoń do funkcji, które zdefiniowałeś jako normalnie.

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

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

Moim problemem było to, że patrząc na to z długim kątem:

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

zrobiłem to ...

po prostu napisać

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

zamiast

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

Tak może (to jest, jak rozumiem oryginalne pytanie) ty. Oto jak to zrobiłem. Wystarczy powiązać go z kontekstem zewnętrznym. Na przykład:

//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 
} 

I napotkał ten sam problem, gdy próbuje metod dostępu do obiektu, który został instancja na DOM obiekt gotowy tylko. Prace. Mój przykład:

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; 
} 

teraz można użyć coś prostego, jak:

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

// wywołanie funkcji javascript funkcja jQuery

// w JavaScript część

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); 
} 

// w jQuery części

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

Ładne i łatwe. Dzięki człowieku –

+0

jeśli zadzwonię do niceJavascriptRoutine() Otrzymuję błąd - "niceJavascriptRoutine nie jest funkcją" :( – Atara

Powiązane problemy