2013-12-19 2 views
4

Я пытаюсь вызвать функцию javascript для элемента jQuery, который я создал, но кажется, что функция не вызывается при запуске функции. Функция работает, когда запускается сама по себе, но не при запуске на другом объекте jQuery. Вот функция:Вызов функции javascript для объекта jQuery

$(document).ready(function() { 
var $Chart = $('#Chart'); 
/* 
returns true if some Expand element is open 
*/ 
function closeExpand() { 
    alert("Hello"); 
    /*$(this).css("background-color", "black");*/ 
}; 
}); 

Он работает при вызове по себе: http://jsfiddle.net/5F5GF/

$('.ChartLink').click(function() { 
    closeExpand(); 
    }); 
}); 

Но не при вызове на другом объекте JQuery: http://jsfiddle.net/dsHRN/

$('.ChartLink').click(function() { 
    $Chart.closeExpand(); 
    }); 
}); 

Что я делаю неправильно здесь, и как я могу назвать функцию javascript на другом объекте?

ответ

5

Вы можете расширить jquery.fn (Jquery прототип), чтобы добавить новую функцию, так что она доступна из Jquery объекта:

Try:

$.fn.closeExpand = function() { 
    this.css("background-color", "black"); 
    return this; //for chaining 
}; 
$Chart.closeExpand(); 

Demo

Ваш функция closeExpand в настоящее время не связана с прототипом объекта jquery, добавив его в свой прототип, вы можете вызвать его с помощью объекта jquery.

Или вы могли бы сделать:

$('.ChartLink').click(function() { 
    closeExpand.call($(this)); 
}); 

и

function closeExpand() { 
    this.css("background-color", "black"); 
}; 
+0

Верхнее решение работает, спасибо! Я все еще немного смущен тем, как работает синтаксис «$ .fn.closeExpand», не могли бы вы объяснить, почему этот синтаксис необходим, в отличие от того, что я сделал? (Я согласен с ответом через 4 минуты, как только смогу) – Tim

+1

@Tim '$ .fn' является псевдонимом прототипа jquery, поэтому вы просто добавляете свою функцию как часть прототипа jquery, чтобы любой созданный объект jquery мог доступ к этой функции. С исходным кодом он не связан с прототипом jquery, поэтому вы не можете просто вызвать его из объекта jquery. – PSL

+0

ах, как и другие обычные объекты jQuery, я вижу. Большое спасибо :) – Tim

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