2012-11-26 71 views
1

我有實現這個顏色拾取插件掙扎:

http://www.eyecon.ro/colorpicker/

我有多個字段的表單,我想要的顏色選擇器彈出時我選擇任何字段,並根據所做的選擇更改值。

這裏是我的代碼:

jQuery(function($) { 
    function changeColor(e) { 
     e.preventDefault(); 
     $(this).ColorPicker({ 
      onChange: function(hsb, hex, rgb) { 
       $(this).attr('value', '#' + hex) 
      } 
     }); 
    } 
    $('form.niceform input').live('mouseup', changeColor); 
}) 

出於某種原因雖然,$(本).attr ......部分沒有認識到$(這)是當前選定的領域。

有人能幫我理解我在做什麼錯嗎?

謝謝!

回答

7

此時,$(this)是colorpicker,而不是您應用colorpicker的元素。

嘗試這樣:

jQuery(function($) { 
    function changeColor(e) { 
     e.preventDefault(); 
     var elem = $(this); 
     elem.ColorPicker({ 
      onChange: function(hsb, hex, rgb) { 
       elem.attr('value', '#' + hex) 
      } 
     }); 
    } 
    $('form.niceform input').live('mouseup', changeColor); 
}) 

編輯:作爲非常尖的人士指出,有幾個事情可以做,使這個好一點:

jQuery(function($) { 
    function changeColor(e) { 
     e.preventDefault(); 
     var elem = $(this); 
     elem.ColorPicker({ 
      onChange: function(hsb, hex, rgb) { 
       elem.val('#' + hex) 
      } 
     }); 
    } 
    $('form.niceform input').on('mouseup', changeColor); 
}) 
+2

也許還值得一提的是,這是要設置的值屬性的愚蠢方式(使用'.VAL()'代替),而'.live()'不推薦使用。 – Pointy

+0

謝謝,這有助於很多! – Nathan

1
jQuery(function($) { 
    function changeColor(e) { 
     e.preventDefault(); 

     var self = $(this); 

     self.ColorPicker({ 
      onChange: function(hsb, hex, rgb) { 
       self.val('#' + hex); 
      } 
     }); 
    } 
    $('form.niceform input').live('mouseup', changeColor); 
}); 

您應該將$(this)函數放在ColorPicker函數之外的變量中。

+0

一個簡單的問題......示波器門在哪裏?我認爲ColorPicker對象定義了一個範圍,所以我不知道我可以將變量一直傳遞給onChange方法中的函數調用。 – Nathan

+0

範圍是'onChange'內的函數。 – MacMac

0

嘗試:

jQuery(function($) { 
    function changeColor(e) { 
     var self = this; 
     e.preventDefault(); 
     $(self).ColorPicker({ 
      onChange: function(hsb, hex, rgb) { 
       $(self).attr('value', '#' + hex) 
      } 
     }); 
    } 
    $('form.niceform input').live('mouseup', changeColor); 
})