2016-06-29 8 views
1

リスト内の2つのボタンのCSSを切り替えることを試みています。 1つをクリックすると、もう1つはボーダーを持たず、その逆もあります。ここに私のコードです:最初のクリックでcss()が起動しない

function navigate_menu(event, ec){ 

    $(event).css("border-top", "3px solid rgba(102,205,0, 0.8)"); 
    var search_id=$(event).attr("name"); 
    var chartid = "pie_chart_"+$(event).attr("name"); 
    var editid = "edit_"+$(event).attr("name"); 

    if(ec=="c"){ 

     $(".li-edit").css("border-top", "0px solid rgba(102,205,0, 0.8)");  
     $("#"+chartid).appendTo($("#chart_"+search_id+"_container")); 
     $("#"+editid).css("display","none"); 
     $("#"+chartid).css("display","block"); 


    }else{ 

     $(".li-chart").css("border-top", "0px solid rgba(102,205,0, 0.8)");   
     $("#"+editid).appendTo($("#chart_"+search_id+"_container")); 
     $("#"+chartid).css("display","none"); 
     $("#"+editid).css("display","block"); 


    } 
} 

HTML:

+"<ul id=\"navigation_list\">" 
     +"<li onclick=\"navigate_menu(this,'c')\" class=\"li-chart\" name=\""+search_id+"\">Chart &amp; Legend</li>" 
     +"<li onclick=\"navigate_menu(this,'e')\" class=\"li-edit\" name=\""+search_id+"\">Edit Chart\\Change Data</li>" 
+"</ul>" 

だから、私が最初にクリックしたときに、何も起こりませんし、それが動作する秒後。次に、他のボタンをクリックすると、同じ(最初の何もない、2番目の作品)。最初のクリックで、親(ul)をクリックしたと思うかもしれませんが、どのように修正するのか分かりません。この「メニュー」はJS関数から複数の要素に追加されるので、残念です。

私もaddClass()removeClass()を試しましたが、それと同じ結果です。

ありがとうございました!

+0

あなたのイベントを処理するためのjQueryを使用しないのはなぜそれらをインラインにするのではなく、 – Adjit

+0

@Adjitは、ドキュメントの読み込みが遅いためです。外部ソースなどから約40のグラフを読み込みます。準備が整ったら少し遅くなります。 – jzippy

+0

'ready()'でイベントを委譲する必要はありません。 '$(document).on( 'click' '.li-chart'、function(){}); ' – Adjit

答えて

0

あなたのCSSにborderedクラスを作成してください。次に、elementと2番目の引数(名前の付け方は分かりません)を渡して、fnをクリックハンドラのどこかに呼び出します。ちょうどcontextと書いてあります。ボーダー変更の責任を負う上記のコードから古いスタッフを削除したことを確認してください。

function toggleBorder(element, context){ 

    if(context === 'c'){ 
     if($(".li-chart").hasClass('bordered')){ 
     $(".li-chart").removeClass('bordered'); 
     } 
     $(".li-edit").addClass('bordered'); 

    }else{ 
     if($(".li-edit").hasClass('bordered')){ 
     $(".li-edit").removeClass('bordered'); 
     } 
     $(".li-chart").addClass('bordered'); 
    } 

} 
+0

しかし、それがクラスを持っているかどうかは関係ありません。なぜなら、私は境界をとにかく取り除くからです。 ? – jzippy

+0

なぜ必要ない場合に操作を実行するのですか?クラスがあるかどうかを確認して削除操作を実行する必要がありますが、問題の原因はありません – Ashot

1

liに共有クラスを指定します。 li-item:次に

<ul id="navigation_list"> 
    <li onclick="navigate_menu(this,'c')" class="li-chart li-item" name="+search_id+">Chart &amp; Legend</li> 
    <li onclick="navigate_menu(this,'e')" class="li-edit li-item" name="+search_id">Edit Chart Change Data</li> 
</ul> 

クリックを検出し、クリックに罫線を適用し、他のすべてから削除するjQueryの.on("click"機能を使用します。

$(document).ready(function() { 
    $(document).on("click", ".li-item", function() { 
     $(this).addClass("border"); 
     $(".li-item").not($(this)).removeClass("border"); 
    }) 
}) 

は、適用するスタイルとCSSクラスを作成します。

.border { 
    border: 2px solid blue; 
} 

フィドル:https://jsfiddle.net/w9bwq57m/

+0

いつでも '$(document).on() '$(document).ready()'で囲む必要はありません。 – Adjit

+0

DOMが本当に遅い接続で準備が整う前にユーザがクリックすると、 – theblindprophet

+0

JSが読み込まれている限り、問題はありません。 – Adjit

0

li要素のonlickの代わりにjqueryのクリックを使うことをお勧めします。また、あなたはそれらの値が関数に渡すことができるように、LI要素にデータ・キー=「C」とデータ・キー=「e」を追加する必要があるでしょう:

+0

ありがとう、@ソニア。私もこれを試みます。違いや理由はありますか? – jzippy

+0

私はliにonclickイベントハンドラがないと信じています。上記のaddEventListenerまたはjqueryコードを使用して接続できます。 – Sonya

関連する問題