Модификация опции плагина jquery по умолчанию после применения - PullRequest
0 голосов
/ 27 октября 2009

Взять следующий пример плагина:

(function($) {
    $.fn.alertOnClick = function(text) {
        return this.each(function(){
            $(this).click(alert(text));
        });
    }
})(jQuery);

, который я мог бы использовать так:

$('p').alertOnClick("this is a silly plugin");

Как изменить код плагина для поддержки следующих действий:

$('p').alertOnClick("this is a silly plugin");
$('p#someSpecificP').setAlertText("different alert text");

это приведет к тому, что все p при нажатии будут отображать "this is a silly plugin" , кроме p с идентификатором "someSpecificP", который будет отображать "different alert text".

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

Спасибо

Ответы [ 4 ]

1 голос
/ 27 октября 2009

решил это с data(), но не уверен, что это лучший подход ...

(function($) {
    $.fn.alertOnClick = function(text) {
        return this.each(function(){
                $(this).data('alertText', text).click(function(){
                    alert($(this).data('alertText'));
                });
        });
    }
    $.fn.setAlertText = function(text) {
        return this.data('alertText', text);
    }
})(jQuery);
0 голосов
/ 27 октября 2009

Почему бы не сделать что-то вроде этого:

$("p").not("#p1").alertOnClick("Hello");
$("#p1").alertOnClick("Bye");

Вызов alertOnClick снова на элемент работает. Просто не забудьте отменить привязку всех событий щелчка, а затем применить новое.

0 голосов
/ 27 октября 2009
<p>test 1</p>
<p>test 2</p>
<p id="s1">test 3</p>
<p>test 4</p>

<script type="text/javascript">
(function($) {
    $.fn.alertOnClick = function(text) {
        return this.each(function(){
            $(this).unbind('click');
            $(this).bind('click', {'t' : text}, function(e){
                alert(e.data.t);
            });
        });
   }
})(jQuery);

$('p').alertOnClick('common alert');
$('p#s1').alertOnClick('unique alert');

</script>

Это прекрасно работает для меня. Я только что удалил привязанные ранее события из целевых элементов.

0 голосов
/ 27 октября 2009

Я не пробовал, но вы должны быть в состоянии определить функцию-член, что-то вроде этого:

(function($) {
    $.fn.alertOnClick = function(text) {
        setAlertText: function(newText) {
                $(this).click(alert(newText));
        }

        return this.each(function(){
                $(this).click(alert(text));
        });
    }
})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...