パレットに応じて色付けできる要素がSVGキャンバスにあります。特定の色がクリックされた場合は、塗りつぶしなしのオプションを追加しようとしています。他の色が選択されている場合は、その属性を削除します。要素から属性を取り除き、別のクリックで属性を復元するjQueryのクリック機能
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オブジェクトが表示されているためです。最初のイベントが発生しているので、選択した要素に塗りつぶし不透明度が適用されていますが、これはどの色が選択されたかに関係なく発生します。また、別の色をクリックすると、botはfill-opacity属性を削除します。
私はまた:notセレクタに何か問題があるかどうか疑問に思いました。私はまた試みた:
var $otherColour = $('#mainToolFill div.toolPopup a').not('#mainToolFill div.toolPopup a.color15');
誰かがこれにいくつかの光を投げることができれば感謝します。私はこれがこれを実装する最も経済的な方法ではないかもしれないことに注意してください。
もっとコードを表示する必要がある場合は、お知らせください。
このコードは、属性を更新するたびに、または読み込み時にのみ実行されますか?また、なぜあなたの条件にjQueryオブジェクトを入れ子にしているのですか?また、条件が意味するのは正確です(異なる属性を持つ要素にバインドしようとしている場合、セレクタはそれを既に行っています)。 – kopischke
要素をキャンバス上にドラッグし、特定の属性(色、線の色、不透明度、半径など)を変更することができます。それらは変更可能なデフォルトの属性を持っています。これらの関数は、いずれかの属性タイプが変更されたときに起動する必要があります。私は正しい場合、変数はイベントを格納できません?変数には、操作したい色を含むhrefへの参照が格納されているので、その特定の色がクリックされたときにそれをイベントにバインドしてキャンバス上の選択したオブジェクトを更新します。少なくともそれは私がやろうとしていることです。 – lharby
あなたはこれをやっているページへのリンクを投稿できますか?あなたが質問に含まれているスニペットから判断することはむしろ難しいです... – kopischke