2009-08-28 2 views
9

Как я могу вызвать функцию jQuery из javascript?вызов функции JQuery из javascript

//jquery 
$(function() { 

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

//just js 
function js_fun() { 

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

Вы просто называете? С чем конкретно связаны проблемы? –

+0

Вы пытаетесь создать плагин jQuery, т. Е. Хотите, чтобы ваша функция была доступна в виде $ (foo) .your_function()? – JorenB

+5

Это становится все хуже и хуже, это jQuery и JavaScript. –

ответ

14

Вы не можете.

function(){ 

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

Это замыкание. my_fun() определяется только внутри этой анонимной функции. Вы можете позвонить только my_fun(), если вы объявите его на правильном уровне объема, то есть глобально.

$(function() {/* something */}) является IIFE, то есть он выполняется немедленно, когда DOM готов. Объявив my_fun() внутри этой анонимной функции, вы не позволяете остальной части сценария «видеть» его.

Конечно, если вы хотите запустить эту функцию, когда DOM полностью загружен, вы должны сделать следующее:

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

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

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

Можете ли вы сказать мне, как объявить глобальную функцию в jquery? Если у вас есть примеры, это было бы замечательно. – 2009-08-28 08:53:13

+2

На самом деле я показал вам пример. jQuery является частью Javascript. В Javascript мы определяем глобальные функции, как в моем примере (первая функция объявляется глобально). –

+0

Не работает – Imran

1

функция JQuery называется так же, как функция JavaScript.

Например, чтобы динамически добавлять класс «красный» в документе элемент с идентификатором «orderedlist» с помощью функции JQuery addClass:

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

В отличии от обычной линии JavaScript вызывающей регулярной функции :

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

addClass() является функцией JQuery, getElementById() является функцией JavaScript.

Функция знака доллара делает доступной функцию jQuery addClass.

Единственное отличие состоит в том, что пример jQuery вызывает функцию addclass объекта jQuery $ ("# orderedlist"), а обычный пример вызывает функцию объекта документа.

В коде

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

Используется для указания кода для запуска, когда DOM готова.

Он не различает (как вы думаете), что такое «код jQuery» из обычного кода JavaScript.

Итак, чтобы ответить на ваш вопрос, просто вызовите функции, которые вы определили так, как обычно.

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

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

Моя проблема заключалась в том, что я смотрел на него из длинного угла:

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

Я сделал это ...

Я просто пишу

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

вместо

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

Да, вы можете (это, как я понимаю, оригинальный вопрос). Вот как я это сделал. Просто привяжите его к внешнему контексту. Например:

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

я столкнулся с этой же проблемой при попытке доступа к методам объекта, который был реализованным на DOM объект только готов. Работает. Мой пример:

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

теперь вы можете использовать что-то простое, как:

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

// Javascript функция вызова функция JQuery

// В JavaScript часть

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

// В Jquery части

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

Ницца и легко. Спасибо человеку –

+0

, если я позвоню niceJavascriptRoutine() Я получаю ошибку - «niceJavascriptRoutine не является функцией» :( – Atara

Смежные вопросы