Вызов определяемой пользователем функции для объекта jQuery - PullRequest
1 голос
/ 12 сентября 2011

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

$(document).ready(function() {
    $("#colorChanger p").click(function() {
        $(this).changeColor();
    });

    function changeColor() {
        $(this).css("color", "white");
    };
})

У меня также есть этот код на JSFiddle . Что не так с моим кодом?

Ответы [ 5 ]

3 голосов
/ 12 сентября 2011

Обновлена ​​скрипка: http://jsfiddle.net/xME2L/5/

Если вы хотите добавить функцию, чтобы вы могли вызывать ее для всего, что возвращается из $ (), вы должны использовать:

$.fn.functionName = function() {}
0 голосов
/ 12 сентября 2011

Вы должны определить changeColor как плагин JQuery, если вы хотите назвать его как $ (this) .changeColor (); :

$(document).ready(function(){            
    $("#colorChanger p").click(function(){
        $(this).changeColor();
    });

    $.fn.changeColor = function() {
      this.css("color","white");
    };

})

0 голосов
/ 12 сентября 2011

В качестве альтернативы решения agmcleod , вы можете позвонить changeColor таким образом (без изменения changeColor):

changeColor.call(this);

Демонстрация изменений здесь .

0 голосов
/ 12 сентября 2011

Функция changecolor никогда не была назначена объекту jquery el.

Альтернативой решению agmcleod будет:

$(document).ready(function(){

        $("#colorChanger p").click(function(){
           changeColor($(this));
         });

        function changeColor(el){
            el.css("color","white");
        };
});

http://jsfiddle.net/dq6yv/

0 голосов
/ 12 сентября 2011

Вот мое решение . Вы неправильно передали объект в функцию changeColor. Я также рекомендовал бы объявлять changeColor вне функции document.ready.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...