2016-04-05 3 views
-2

私は、マウスの右ボタンがクリックされたリスト項目のdata-id値を継承するカスタムコンテキストメニューを持っています。JQueryを使ってdata-idを動的に正しく渡す方法

もっと明示的に言えば、私には国のリストがあります。ユーザーがこれらの国(リスト項目)のいずれかを右クリックすると、コンテキストメニューが表示されます。私は、データID値をコンテキストメニューのリスト項目に渡す必要があります。

Elementsのインスペクタ/ウィンドウに表示されていることによると、データは正しく正常に渡されたようです。最初のクリックで、data-idが正常に取得されます。しかし、ユーザーが第2国をクリックしたり、アイテムを一覧表示すると、ユーザーが右クリックした最初の国のデータIDが引き出されます。私は間違って何をしていますか?

// When the ESC key is pressed, 
 
$(document).bind("keyup", function(event) { 
 
    // If ESC is pressed, 
 
    if (event.keyCode == 27) { 
 
     // Hide Context Menu 
 
     $('.context-menu').hide(); 
 
     $('.context-menu').each(function() { 
 
      $(this).find("li").each(function() { 
 
       var current = $(this); 
 
       current.removeAttr("data-id"); 
 
      }); 
 
     }); 
 
    } 
 
}); 
 

 
// When user clicks on document, 
 
$(document).on("click", function() { 
 
    $('.context-menu').hide(); // hide context menu 
 
    $('.context-menu').each(function() { 
 
     $(this).find("li").each(function() { 
 
      var current = $(this); 
 
      current.removeAttr("data-id"); 
 
     }); 
 
    }); 
 
}); 
 

 
$(document).ready(function() { 
 
    $('.members-list').on("contextmenu", "li", function(e) { 
 
     e.preventDefault(); 
 

 
     var id = $(this).data("id"); 
 

 
     $('.context-menu').each(function() { 
 
      $(this).find("li").each(function() { 
 
       $(this).attr("data-id", id); 
 
      }); 
 
     }) 
 

 
     $('.context-menu') 
 
      .css({ 
 
       top: e.pageY + 'px', 
 
       left: e.pageX + 'px' 
 
      }) 
 
      .show(); 
 
    }); 
 

 
    $('.context-menu').on("click", "li", function() { 
 
     var id = $(this).data("id"); 
 
     var action = $(this).data("action"); 
 
     switch (action) { 
 
      case "view": 
 
       alert("View: " + action + " " + id); 
 
       break; 
 
      case "edit": 
 
       alert("Edit: " + action + " " + id); 
 
       break; 
 
      case "delete": 
 
       alert("Delete: " + action + " " + id); 
 
       break; 
 
     } 
 

 
     // Hide Context Menu 
 
     $('.context-menu').hide(); 
 

 
     // Remove data id 
 
     $('.users-menu').each(function() { 
 
      $(this).find("li").each(function() { 
 
       var current = $(this); 
 
       current.removeAttr("data-id"); 
 
      }); 
 
     }); 
 
    }); 
 
});
*, 
 
*::before, 
 
*::after { 
 
    margin: 0; 
 
    padding: 0; 
 
    outline: 0; 
 
} 
 
ul, 
 
ol { 
 
    list-style: none; 
 
} 
 
.members-list li { 
 
    color: ghostwhite; 
 
    cursor: pointer; 
 
    display: block; 
 
    background: black; 
 
    padding: 4px; 
 
    margin-bottom: 2px; 
 
} 
 
.context-menu { 
 
    display: none; 
 
    padding: 2px; 
 
    position: absolute; 
 
    background: ghostwhite; 
 
} 
 
.context-menu li { 
 
    padding: 6px; 
 
    cursor: context-menu; 
 
    border-bottom: 1px solid gray; 
 
} 
 
.context-menu li:last-child { 
 
    border-bottom: 0; 
 
} 
 
.context-menu li:hover { 
 
    color: ghostwhite; 
 
    background: gray; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
    <div class="members"> 
 
    \t <ul class="members-list"> 
 
    \t \t <li class="member" data-id="south-africa">South Africa</li> 
 
    \t \t <li class="member" data-id="england">England</li> 
 
    \t </ul> 
 
    </div> 
 
    <div class="context-menu"> 
 
    \t <ul class="context-menu-list"> 
 
    \t \t <li class="context-menu-item" data-action="view"> 
 
    \t \t \t <div class="menu-item"> 
 
    \t \t \t \t View Member 
 
    \t \t \t </div> 
 
    \t \t </li> 
 
    \t \t <li class="context-menu-item" data-action="edit"> 
 
    \t \t \t <div class="menu-item"> 
 
    \t \t \t \t Edit Member 
 
    \t \t \t </div> 
 
    \t \t </li> 
 
    \t \t <li class="context-menu-item" data-action="delete"> 
 
    \t \t \t <div class="menu-item"> 
 
    \t \t \t \t Delete Member 
 
    \t \t \t </div> 
 
    \t \t </li> 
 
    \t </ul> 
 
    </div>

私は要素検査のスクリーンショットを持っている:

これは、ファイルがどのように見えるかです。以下それらを見つけるしてください:。 enter image description here

+0

あなた自身をデバッグいくつかを行う必要があり、例えばバグを再現するコードに提供された例を絞り込む。 – alex

+0

をあなたが唯一の関連するコードを配置する必要があります。 – Rajesh

+0

注目、Rajesh。ありがとうございました。私はここからやります。 – lungaonline

答えて

0

こんにちはこのライン$( 'コンテキストメニュー')上( "クリック"、 "LI"、機能(後に次のコード

var id = $(this).data("id"); with var id =$(this).attr("data-id"); 

を交換してください)

それはあなたが何か問題がある場合はそれをチェックして、私に言うのを助ける

+0

ありがとう、Hitesh。出来た。私はあなたの援助に感謝します。 – lungaonline

+0

ようこそ@lungaonline –

関連する問題