0

我被要求在工作中修補一個寫得相當差的響應式網站,並被jQuery點擊事件留下了難題。jQuery點擊事件只適用於風景(iPhone)

這個事件在橫向模式下可以在iPhone上正常工作,但是在肖像模式下,它什麼都不做。

這裏是jQuery的:

if (width <= 480) { 
    function menu(e) { 
     e.PreventDefault(); 
     $('#menu-item-93 .sub-menu').slideToggle('fast'); 
    } 

    $('.nav-cont').addEventListener('click', menu(e)); 
    $('.nav-cont').addEventListener('touchstart', menu(e)); 
} 

而且那部分從header.php文件相關的(我提到,這是一個WordPress站點)

<nav id="main" class="main clearboth"> 
    <?php 
     wp_nav_menu(array( 
      'sort_column' => 'menu_order', 
      'theme_location' => 'primary', 
      'after'=>'<img src="'.template_url('images/button/link-445x68.png').'" class="show-480" />' 
     )); 
    ?> 
</nav> 
<div class="nav-cont"> 
    <div class="nav-text show-480">NAVIGATION</div> 
    <img class="nav-button show-480" src="<?php echo template_url('images/button/navigation-closed-nt-445x52.png');?>" /> 
</div> 

任何人有任何想法,爲什麼這觸摸事件僅在橫向模式下觸發?

回答

0

這是最終解決了通過瀏覽舊開發機構在網站上工作的多個JavaScript文件。我發現這個選擇器上有多個點擊處理程序實例,這些實例相互矛盾。我刪除了其他人和巴姆,它的工作。

它甚至在我本來打算爲它與基本

$('.nav-cont').click(function() { 
}); 

事件處理的工作方式工作。

+1

你必須討厭自己沒有清理乾淨的舊開發者。 –

0

您的代碼以if (width <= 480) {開頭。這看起來像是有效的肖像,但不在風景中,使問題正確無誤。

+0

感謝您在最後發現我的拼寫錯誤,它現在已經更新爲可以說風景了,因爲它應該。 'if(width <= 480){'不應該引起任何問題,這是與媒體查詢中定義的相同的邊界來觸發移動佈局,這可以很好地工作。 –

+0

所以基本上,它只在移動佈局中運行JavaScript,並且iphone在約束條件下正常工作。 –

+0

但是你可以嘗試用true或1 == 1來替換寬度<= 480,看看這是不是問題?只是爲了確保這是不可能的 – JSantos

0

這些行:

$('.nav-cont').addEventListener('click', menu(e)); 
$('.nav-cont').addEventListener('touchstart', menu(e)); 

應該是:

$('.nav-cont').addEventListener('click', menu); 
$('.nav-cont').addEventListener('touchstart', menu); 

甚至:

$('.nav-cont').on('click', menu); 
$('.nav-cont').on('touchstart', menu); 

當前的代碼將調用menu功能到事件處理程序的結果。

+0

感謝您的幫助邁克,這不幸沒有解決這個問題。當然,如果我的事件處理程序無效,它不會在橫向模式下啓動?或者在因此而調整大小的桌面瀏覽器中。 –

+0

很難說沒有看到更多的代碼。可能有其他附加的事件處理程序在其他條件下綁定。例如,也許有一個'addEventListener'作爲附加在其他實例中的同一個按鈕?另外,我從來沒有見過像這樣的jQuery對象上使用addEventListener。它不應該是'$('。nav-cont')。on('click',menu);'? –