2017-07-07 2 views
0

Photos1、Photos2、Photos3、Photos4のメニューをすばやくクリックすることができ、 "$ .get(..."はサーバーに4回送信されます。いずれかをクリックするとこれらのメニューをすべて無効にする必要があります。環境:NodeJS、エクスプレス、パグ、jQueryのおかげで、パットul/liリスト内のすべての属性メニュー項目を無効にするには?

--------------DOM---------------------------------- 
// file = photos.pug 
div#wrapper2 
    div#altnav 
     ul 
     include includes/altnav.pug 
     include includes/navjs.pug 
--------------------------------------------------- 
// file = includes/altnav.pug 
li: a.navigation(href='#', data-level='/images/cs/Photos1') Photos1 
li: a.navigation(href='#', data-level='/images/cs/Photos2') Photos2 
li: a.navigation(href='#', data-level='/images/cs/Photos3') Photos3 
li: a.navigation(href='#', data-level='/images/cs/Photos4') Photos4 
--------------------------------------------------- 
// file = includes/navjs.pug 
script. 
    $(function(){ // jQuery DOM ready 
     $('.navigation').click(function() { 

      $(this).css({ // Disable this menu item 
       "pointer-events": "none", 
       "cursor": "default" 
      }); 
// ??????? I NEED TO DISABLE ALL Menus in this List ??????? 
      var level = 'm' + $(this).data('level');  // Append an 'm' so I know this came from navjs.pug 
      var url = '/navigation?level=' + escape(level); // Send this to the /router/photos.js 
      $.get(url, function (data) { 
       $('body').html(data);   // data = new HTML page to be loaded by browser 
      }); 
     }); 
    }); 
+0

あなたがdisableすべての属性によって何を意味するのですか? – clarkoy

+0

'removeAttr();'を使うことができます – clarkoy

答えて

0

これ以上クリックしないとクリックイベントに応答する必要があるためイベントの委任を使用する方がよいでしょう。 囲みulタグにわかりやすいクラス名 "navigation-menu"を与えて、セレクタがすべてのulタグを対象としないようにすることをお勧めします。

$(function(){ // jQuery DOM ready  
 
    var navigationMenu = $("ul.navigation-menu"); 
 
    navigationMenu.on("click", "a", disableLinks); 
 
    function disableLinks(e) { 
 
     navigationMenu.find('a.navigation').css({ 
 
     "pointer-events": "none", 
 
     "cursor": "default", 
 
     "color": "#aaa" 
 
     }); 
 
     e.stopPropagation(); 
 
    } 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<ul class="navigation-menu"> 
 
    <li><a class="navigation" href="#link1" >link1</a></li> 
 
    <li><a class="navigation" href="#link2" >link2</a></li> 
 
    <li><a class="navigation" href="#link3" >link3</a></li> 
 
</ul>

+0

あなたのコードは完璧に機能しました。 ulの正しい玉のフォーマットを調べる際に問題がありました。私は "ul navigation-menu"を使っていましたが、 "ul.navigation-menu"だったはずです。すべてのメニュー項目がグレー表示され、無効になっています。 www.mysite10.comは私が取り組んでいるものです。 –

+0

Jadeは構文がクリーンですが、構造がインデント(エラーが発生しやすい)によって完全に決定されるため、このような種類のエラーが最終結果を壊し、エラーを見つけるのが容易ではありません。とにかく、それは味の問題です(パフォーマンスが考慮されない場合)。幸運を構築し、あなたのウェブサイトを維持する – taha

+1

ねえ、あなたは玉について正しいです....すべてを再度ありがとう! –

0

私は.navigationでのすべての要素にid属性を適用し、関数に$(この)のIDを渡し、関数を記述しますそのIDと一致しない他のすべてのメニュー項目を無効にします。

function disableAllBut(id) { 
    $(.navigation).prop('disable', true); 
    $(id).prop('disable', false); 
} 
+0

私はid属性の形式がわかりません。それはrel = 'listitem'、またはalt = 'listitem'か、 "#"記号などが必要ですか? –

関連する問題