2017-05-04 44 views
0

我正在嘗試使用jQuery的on檢測只有未命名空間的事件在jQuery中檢測非命名空間事件

我試圖檢查on回調中的命名空間如下,但它總是不確定的:

$(".selector").on(
    "click", 
    function (e) { 
     console.log(e.namespace); // Undefined, not "mynamespace" 
    } 
); 

$(".selector").trigger("click.mynamespace"); 

我也看到了,你可以追加到事件名稱,以排除任何「$」。命名空間,但似乎只適用於trigger,而不是on。即使該事件被命名空間下運行:

$(".selector").on(
    "click.$", 
    function (e) { 
     // runs even when triggered with a namespace 
    } 
); 

我不知道在哪裏可以從這裏走,因爲當我登錄事件對象,命名空間是無處可尋。

在此先感謝!

回答

1

試着通過handleObj來訪問它。

HTML:

<div class="selector"> 
    BOX 
</div> 
<button onclick="clickWithNamespace()">with ns</button> 
<button onclick="clickWithoutNamespace()">without ns</button> 

JS:

$(".selector").on(
    "click.mynamespace", 
    manageClick 
); 
$(".selector").on(
    "click", 
    manageClick 
); 
function manageClick(event) { 
    console.log(event.handleObj.namespace); 
    $(".selector").text(event.handleObj.namespace); 
} 

function clickWithNamespace() { 
    $(".selector").trigger("click.mynamespace"); 
} 


function clickWithoutNamespace() { 
    $(".selector").trigger("click"); 
} 

https://jsfiddle.net/j52rmxrs/15/

+0

感謝您的回答!不幸的是,即使代碼在沒有名稱空間的情況下被觸發,代碼也總是說名稱空間是「mynamespace」。這是一個問題,因爲目標是檢測事件何時不是**名稱空間。換句話說,我需要它來做你的代碼所做的事情,但是沒有「on」第一個參數中的「.mynamespace」。那有意義嗎? – Randy

+0

更新了您想要實現的jsfiddle鏈接。明天我也會更新示例中的代碼。對不起,我是通過電話現在,我花了20分鐘使用堆棧和手機的jsfiddle – quirimmo

+0

更新了代碼 – quirimmo