Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > ColorPicker и быстрая смена цвета сайта


Автор: depodimon 29.12.2009, 23:54
Собственно использую скрипт Farbtastic Color Picker 1.2
Ссылка: http://acko.net/dev/farbtastic

Мне нужно чтобы сразу вместе с изменением цвета менялся и цвет сайта.

Сделал так:  

Код

    <script type='text/javascript'>
    $(document).ready(function() {

    $('#colorpicker').farbtastic('#color , .color'); //добавил свой класс .color

    });
    </script>


всё меняется отлично. 

Но есть цвет по-умолчанию 
<input type='text' id='color' name='color' value='#18a5c9'>

Если без класса,  вот так  $('#colorpicker').farbtastic('#color'); то он нормально передаёт его полю
и с поля цвет при заходе на страницу или после F5, а если с классом .color то он полю не передаёт цвет при заходе на странцу, а надо чтобы передавал! 

Я уже всю голову себе поломал, подскажите как сделать? 

Автор: IDVsbruck 30.12.2009, 02:12
Посмотрел библиотечку ... похоже, у них немного расхождения между описанием и кодом ...

Читаем:
...
$(...).farbtastic(callback)
This creates color pickers in the selected objects. callback is optional and can be a:
• DOM Node, jQuery object or jQuery selector: the color picker will be linked to the selected element(s) by syncing the value (for form elements) and color (all elements).

Смотри в библиотеке:
(опускаем цепочку передач параметров)
Код

...
  fb.linkTo = function (callback) { //базовая функция - единственная, вызываемая прямо из модуля
    // Unbind previous nodes
    if (typeof fb.callback == 'object') {
      $(fb.callback).unbind('keyup', fb.updateValue);
    }

    // Reset color
    fb.color = null;

    // Bind callback or elements
    if (typeof callback == 'function') { //начинаем проверку - функция
      fb.callback = callback;
    }
    else if (typeof callback == 'object' || typeof callback == 'string') { // или объекты/селектор
      fb.callback = $(callback);
      fb.callback.bind('keyup', fb.updateValue);
      if (fb.callback.get(0).value) {
        fb.setColor(fb.callback.get(0).value); //как видно, берется только первый элемент из всего множества, которому и назначается дальнейшая обработка
      }
    }
    return this;
  }
...


Если не боишься менять базовый модуль, то можно попробовать видоизменить типа такого:
Код

...
else if (typeof callback == 'object' || typeof callback == 'string') {
    fb.callback = $(callback);
    fb.callback.bind('keyup', fb.updateValue);
    $.each(fb.callback, function(elem){if (elem.value) fb.setColor(elem.value)});
}
...

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

Автор: depodimon 30.12.2009, 03:00
Попробовал всёровно не хочет начальное значение получать, так то работает когда нажмёшь и начнёшь водить , а как только заходишь на страницу значение не получает. Ну а если без класса вызывать то получает

Автор: depodimon 30.12.2009, 16:45
 smile Блин как его заставить работать.. Сейчас работает но глупым способом, 
    
Код

<script type='text/javascript'>
    $(document).ready(function() {

    $('#colorpicker').farbtastic('#color');

    $('#colorpicker').mouseover(function () {
    $('.color').css('background-color', $('#color').val());
    });

    });
    </script>



хотелось бы по уму всё сделать! 

Подскажите кто нибудь, как нормально это реализовать!?

Автор: depodimon 2.1.2010, 01:38
 smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)