2016-01-21 81 views
2

我有兩個按鈕,即'拒絕按鈕'和'上一個按鈕'。單擊拒絕按鈕時,我正在對上一個按鈕進行觸發器調用。在Prev按鈕處理程序中可以通過單擊Reject按鈕來知道請求來自哪裏?如何知道請求來自觸發器點擊

這是我的代碼

$(document).on('click', '#prev', function(event) { 
 
    var event_from = event.target.tagName; 
 
    alert(event_from); 
 
}); 
 

 
$(document).on('click', '#reje', function(event) { 
 
    $("#prev").click(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="button" id="reje" value="Reject"> 
 
</div> 
 
<input type="button" id="prev" value="prev">

我已經使用event.target.tagName;,但我得到的值在這兩種情況下試圖爲INPUT

http://jsfiddle.net/Us8uc/4350/

+1

'event.target.id'?或'$(this).attr('id');'或$(this).val();''tagName'不會起作用,因爲它們都是相同的。 – putvande

+0

你想獲得上一個函數的事件嗎?那是對的嗎? – prola

+0

,因爲事件是在您手動觸發事件的按鈕上觸發的。你不會得到原始點擊事件。檢查事件對象,你會看到兩者之間有什麼不同。 – epascarello

回答

5

可能嗎在Prev按鈕處理程序中知道通過點擊拒絕按鈕發出請求?

一個選項是檢查event對象上的.isTrigger屬性。它應該返回true,如果事件被觸發(就像在這種情況下一樣)。正如在下面的評論中指出的那樣,這個一個沒有記錄的內部特徵,雖然這在目前可能不太可能。請參閱下面的其他選項。

Updated Example

$(document).on('click', '#prev', function(event) { 
    if (event.isTrigger) { 
    alert('Triggered by reject.'); 
    } 
}); 

$(document).on('click', '#reje', function(event) { 
    $("#prev").click(); 
}); 

你也可以檢查,以確定事件如何起源的event對象的.originalEvent財產。該屬性設置爲僅當事件originated from the browser,這意味着,這將是undefined觸發時:

Updated Example

$(document).on('click', '#prev', function(event) { 
    if (event.originalEvent === undefined) { 
    alert('Triggered by reject.'); 
    } 
}); 

$(document).on('click', '#reje', function(event) { 
    $("#prev").click(); 
}); 

或者,你可以觸發點擊事件之前設置一個標誌:

Updated Example

var triggeredByReject = false; 

$(document).on('click', '#prev', function(event) { 
    if (triggeredByReject) { 
    triggeredByReject = false; 
    alert('Triggered by reject.'); 
    } 
}); 

$(document).on('click', '#reje', function(event) { 
    triggeredByReject = true; 
    $("#prev").click(); 
}); 

另一種選擇是將比較時間戳的事件:

Updated Example

var lastRejectClick = 0; 
$(document).on('click', '#prev', function(event) { 
    if (lastRejectClick > event.timeStamp) { 
    alert('Triggered by reject.'); 
    } 
}); 

$(document).on('click', '#reje', function(event) { 
    lastRejectClick = event.timeStamp + 10; 
    $("#prev").click(); 
}); 

*我加入10毫秒的時間戳考慮到潛在的時間戳逼近/差異。

+0

看來你正在利用jQuery的無證內部功能。雖然我通常在使用這些功能時沒有問題,但至少應該聲明,如果實施更改,它可能會中斷而不會發出警告。 – zzzzBov

+0

@zzzzBov你是對的,令人驚訝的是我找不到任何關於該物業的官方文件。基於[源代碼](https://github.com/jquery/jquery/blob/d92310050ca7bf0b33825d64e052f9a8809c3e9e/test/data/jquery-1.9.1.js#L3026),如果事件被觸發,它應該始終爲真,所以我非常懷疑它會改變。儘管我同意你的評論,但這似乎是一個XY問題。還有其他各種解決方案。 –