Tanımlanmış bir tıklama işleyicim olduğunu varsayalım:
$("#foo").click(function(e){
});
İşlev işleyicinin içinde olayın programlı olarak mı yoksa kullanıcı tarafından mı başlatıldığını nasıl anlayabilirim?
Tanımlanmış bir tıklama işleyicim olduğunu varsayalım:
$("#foo").click(function(e){
});
İşlev işleyicinin içinde olayın programlı olarak mı yoksa kullanıcı tarafından mı başlatıldığını nasıl anlayabilirim?
$x.click()veya $x.trigger('click').
Yanıtlar:
Olay nesnesine bir göz atabilirsiniz e. Olay gerçek tıklama tetiklendiyse, olayları sever gerekecek clientX, clientY, pageX, pageY, vb iç eve sayılar olacak; bu sayılar, tıklama tetiklendiğinde fare konumu ile ilgilidir, ancak tıklama klavye aracılığıyla başlatılsa bile muhtemelen mevcut olacaktır. Etkinlik tarihine kadar tetiklendiyse $x.click(), konumunda olağan konum değerlerine sahip olmazsınız e. Ayrıca , olay geldiyse orada olmaması gereken originalEventmülke de bakabilirsiniz $x.click().
Belki bunun gibi bir şey:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
Ve işte oynamak için küçük bir sanal alan: http://jsfiddle.net/UtzND/
originalEvent? Doğru türden bir şey mi? Herhangi bir yerde koordinatlar var mı? Koordinatlar tutarlı mı? Koordinatlar içeride #foomi? ...
JQuery tetik kılavuzunda belirtildiği gibi ekstra bir parametre kullanabilirsiniz :
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
$x.click()ve .click()arayanın size açıkça numara yaptığını söylemesi gerekiyor. Bu Kevin Owocki'nin ne yaptığına bağlı olarak bir sorun olabilir veya olmayabilir.
$x.click()eventHandler (kullanıcı tıklaması için, "normal" olabilir) arasındaki
Zaten cevaplanmış başka bir soru var.
whichOlay nesnesinin özelliğini kullanın . undefinedKodla tetiklenen olaylar için olmalıdır
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
JsFiddle örneği - http://jsfiddle.net/interdream/frw8j/
Umarım yardımcı olur!
select, e.which==undefinedgerçek bir olay için bir eşitlik verir .
Yukarıdaki tüm çözümleri denedim, benim durumumda hiçbir şey işe yaramadı. Aşağıdaki çözüm benim için çalıştı. Umarım size de yardımcı olur.
$(document).ready(function(){
//calling click event programmatically
$("#chk1").trigger("click");
});
$(document).on('click','input[type=checkbox]',function(e) {
if(e.originalEvent.isTrusted==true){
alert("human click");
}
else{
alert("programmatically click");
}
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js">
</script>
<input type="checkbox" id="chk1" name="chk1" >Chk1</input>
<input type="checkbox" id="chk2" name="chk2" >Chk2</input>
<input type="checkbox" id="chk3" name="chk3" >Chk3</input>
DOM Düzey 3, event.is Trusted'i belirtir. Bu, şu anda yalnızca IE9 + ve Firefox'ta desteklenmektedir (testlerime göre. Ayrıca bazı tarayıcılarda geçersiz kılınabileceğini ve muhtemelen güvenilmeye henüz% 100 hazır olmadığını (ne yazık ki) okudum (tam olarak araştırılmamış olsa da).
Bu , @ mu'nun kemanının IE ve Firefox'ta çalışan değiştirilmiş bir sürümüdür.
isTrustedDesteklendiğini ve yazılabilir olmadığını görmek için bazı testleri karıştırmanız gerekir . Bence gerçek cevap, bu sorunun arkasındaki nedene bağlı ve nedenini asla bulamadık.
Entelektüel tartışmaya katılmayı filtreye benim için çalıştı kodu gitmiyorum .click()ve .trigger('click')IS-
$(document).on('click touchstart', '#my_target', function(e) {
if (e.pageX && e.pageY) { // To check if it is not triggered by .click() or .trigger('click')
//Then code goes here
}
});