パレットに従って色付けできる SVG キャンバス上の要素があります。特定の色がクリックされた場合は塗りつぶしなしのオプションを追加し、他の色が選択された場合はその属性を削除しようとしています。
js コード:
if(!$selectedElems){return;}
$selectedElems.each(function(){
$(this)[($(this).prop('tagName') === 'g' ? 'find' : 'filter')]('text[fill],rect[fill],circle,path').attr('fill',colour);
var $noFillColour = $('#mainToolFill div.toolPopup a.color15');
var $otherColour = $('#mainToolFill div.toolPopup a:not("color15")');
if($($noFillColour).bind('click')) {
alert ($noFillColour);
$selectedElems.attr('fill-opacity', '0');
}else{
($($otherColour).bind('click'));
alert ($otherColour);
$selectedElems.removeAttr('fill-opacity');
}
変数に問題があると思われます。アラートに Object オブジェクトが表示されます。最初のイベントが発生しているため、選択した要素に塗りつぶし不透明度が適用されていますが、これは選択された色に関係ありません。また、別の色をクリックすると、塗りつぶしの不透明度属性が削除されます。
また、:not セレクターに問題があるのではないかと考えました。私も試しました:
var $otherColour = $('#mainToolFill div.toolPopup a').not('#mainToolFill div.toolPopup a.color15');
誰かがこれに光を当てることができれば幸いです。これは、これを実装する最も経済的な方法ではない可能性があることに注意してください。
さらにコードが必要な場合はお知らせください。