2016-01-21 31 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问题。还有其他各种解决方案。 –

相关问题