2014-03-13 104 views
1

我正在使用插件Bootstrap颜色选择器滑块。该插件的文档位于:http://www.virtuosoft.eu/code/jquery-colorpickersliders/jquery-colorpickersliders onChange事件触发页面加载

出于某种原因,随插件提供的onchange事件似乎在页面加载时触发。我无法弄清楚为什么。这是我做的还是这是插件本身的问题?

这里是我的意思小提琴:http://jsfiddle.net/bV7qF/

<div class="hsl"></div> 

$(".hsl").ColorPickerSliders({ 
    flat: true, 
    previewformat: 'hsl', 
    order: { 
     hsl: 1, 
     preview: 2 
    }, 
    onchange: function() { 
     alert("test"); 
    } 
}); 

回答

2

是的,看起来像插件调用onchange处理程序,当你初始化它(通过你的代码上面)。 查看源代码。这里是一个链接到它: http://www.virtuosoft.eu/code/jquery-colorpickersliders/jquery-colorpickersliders/v4.1.7/jquery.colorpickersliders.js

此功能:_updateAllElements();调用settings.onchange(container, color); _updateAllElements();本身时调用插件加载(通过上面的代码), 其init();方法里面......

时退房通过搜索“onChange”来源并追踪函数调用的踪迹!

2

我认为它的插件中的东西,我看到的功能,如:

function _addCurrentColorToSwatches() { 
    swatches.unshift(color.tiny.toRgbString()); 
    _storeSwatches(); 

    $(document).trigger("colorpickersliders.changeswatches"); 
} 

而且它也有一个功能_resetSwatches()。 所以它可能是一个问题或插件的作者打算的东西。

例如:设置了默认颜色,onchange被触发,div背景将更改为该颜色。

1

我认为解决方案就在这里。

的_updateAllElements()函数被触发onchange事件

function _updateAllElements(disableinputupdate) { 
    ... 

    settings.onchange(container, color); 

    ... 
    } 

的_buildComponent()函数是在颜色滑块的INIT触发。

 function _buildComponent() { 
     _initElements(); 
     _renderSwatches(); 
     _updateAllElements();//comment or delete this line 
     _bindControllerEvents(); 
     } 

当你有一堆“activateGroup”函数,所有的颜色滑块mods。 在测试我使用的色板MOD,所以我修改了activateGroupSwatches()函数

function activateGroupSwatches() { 

    ... 

    _updateAllElements(true);//comment or delete this line 

    ... 
    } 

我刚刚用这个配置只取得了一些测试,但它似乎工作。函数onchange不会在页面加载时触发,并且函数在之后工作。

$("#color").ColorPickerSliders({ 
      flat: true, 
      color: '#fff', 
      swatches: tab, 
      customswatches: false, 
      order: {}, 
      onchange: function(container, color){ 
        function_you_want(); 
      } 
     });