2009-11-25 33 views
55

Bir pop-up olarak bir <div> açmak için bir hashed bağlantısının onclick olayını kullanıyorum. Ancak , ortadaki tıklama onclick olayını tetiklemez, ancak bağlantının yalnızca href öznitelik değerini alır ve URL'yi yeni bir sayfaya yükler. Açılır pencereyi <div> açmak için ortadaki tıklamayı nasıl kullanabilirim?Orta tıklama kullanarak onclick olayı tetikleme

+13

Orta tıklama tıklama onclick olayını tetiklemediğinde, sorunun nasıl çözüldüğünü hala anlamıyorum. –

+1

@ TomášZato Tarayıcılar, bir tıklama ile bir 'tıklama' olayını ateşlemez, ancak bir 'fare' olayını tetikleyebilirler. Daha sonra javascript çerçevesi bunu karıştırmak için bir 'tıklatma' eylemine bağlayabilir. Http://www.unixpapa.com/js/mouse.html – rds

cevap

53

beggs 'cevabı doğru, ancak orta tıklamanın varsayılan eylemini önlemek istediğiniz gibi geliyor. Bu durumda, olayın varsayılan işlemi duracaktır

$("#foo").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

preventDefault() şunlardır.

+18

Unutmayın ki .live'nin yerine kullanılmadı ve '.on' lehine kaldırıldı. – Neal

+5

, firefox –

+0

içinde çalışmıyor FF'de çalışmak için şunu kullanın: var evt = e || window.event; –

19

Sen tıklandığı fare düğmesini tanımlamak için

event.button

kullanabilirsiniz.

Değiştirilen durumu gösteren düğmeyi gösteren bir tamsayı değeri döndürür.

'klik' standart için
  • 0 orta düğme için, genellikle sol düğme
  • 1, genellikle sağ düğme için
  • 2 tekerlek tıklatın genellikle bu kongre o

Not sağ tıklayın Internet Explorer'da izlenmez: Ayrıntılar için bkz. QuirksMode.

Düğmelerin sırası, işaretleme aygıtının nasıl yapılandırıldığına bağlı olarak farklı olabilir. ve düğme:

Ayrıca fare düğmesi olmuştur tıklamışsa out bulmak için iki özellik vardır Which mouse button has been clicked?

okuyun. Bu özelliklerin her zaman tıklama etkinliğinde çalışmadığını lütfen unutmayın . güvenli bir şekilde, bir fare düğmesini tespit ederseniz, farenizi veya fare kapağını kullanın.

+3

okunmasını öneririm jQuery source - line 2756 - 'if (!' De tarayıcılar arasında standartlaştırılmış olduğundan 'event.which' kullanmanızı öneririm event.which && event.button) event.which = (event.button & 1? 1: (event.button & 2? 3: (event.button & 4? 2: 0))); –

+1

@RussCam Ancak, MouseEvent.which, herhangi bir özellikte tanımlanmadı, ancak MouseEvent.düğmesi, DOM L2 Olaylarında tanımlanır. – Oriol

+0

@Oriol, ancak farklı tarayıcı satıcıları arasında farklı şekilde uygulandı. OP soruyu jQuery ile etiketledi, bu yüzden 'event.which' kullanmayı önerdim ama 'MouseEvent.which' resmi belirtimin bir parçası olmadığını ayrıntılandırmalıydım. Quirksmode bağlantısı için –

6

jQuery 1, bu durumda 2, 3. İstediğiniz sağa olarak soldan tıklama butonu id verir etkinliğine yaptığı bir .which niteliğini sağlar 2.

Kullanımı:

$("#foo").live('click', function(e) { 
    if(e.which == 2) { 
     alert("middle button"); 
    } 
}); 

Adamantiumun cevabı da çalışacak ama o notları gibi IE için dikkat etmek gerekir:

$("#foo").live('click', function(e) { 
    if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) { 
    alert("middle button"); 
    } 
}); 

Ayrıcahatırlamaközniteliği 0-dizinli değil, .which gibi 1 dizine eklenmiş.

+0

mozilla tarayıcısının işlevselliğini geçersiz kılabilir !! örn. Sol tıklama ile açılır bir pencereyi açar .... fakat orta tıklama için bir açılır pencere açılmaz ve açılır pencerenin açılmadığı yeni bir sekme açılır .. bu yüzden bir orta tıklamayı geçersiz kılmak istiyorum mozilla'nın işlevselliği .... –

+0

Mozilla, tüm pop-up'ları yeni bir pencerede açmak yerine yeni bir sekmede açmak için bir ayara sahip. Eğer kullanıcı bu seçeneği etkinleştirdiyse, o zaman * yapabileceğiniz bir şey yok. Eğer bu olmuyorsa sorun sayfasına bir kod veya link gönderebilir misiniz? – beggs

+0

FF'de tıklama olayıyla çalışmaz. – l00k

6

uygun yöntem .live jQuery dan kaldırılan ve daha sonra kaldırıldı olarak, .on kullanmaktır:

$("#foo").on('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

Yoksa "canlı" hissi gibi ve #foo isterseniz üzerine sayfanızda değil belge başlangıç:

$(document).on('click', '#foo', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

original answer

3

Biliyorum partiye geç kaldım, ancak ortadaki tıklamayla baş etmekte sorun yaşayanlar için, etkinliği delege edip etmediğinizi kontrol edin. Delegasyon durumunda, click olayı patlamaz. Karşılaştırma:

Bu orta tıklamalar için çalışır:

$('a').on('click', function(){ 
    console.log('middle click'); 
}); 

Bu orta tıklamalar için çalışmaz:

$('div').on('click', 'a', function(){ 
    console.log('middle click'); 
}); 

Hala kullanarak orta tıklayın izlemeniz gerekirse olay delegasyonu, ilgili jQuery ticket numaralı belgede belirtildiği gibi tek yol, mousedown veya 01 kullanmaktır. Bunun yerine. böylece gibi:

Bu yetkilendirilen orta tıklamalar için çalışır:

$('div').on('mouseup', 'a', function(){ 
    console.log('middle click'); 
}); 

See it online here.

4

Bu soru biraz eski, ama bir çözüm buldu:

$(window).on('mousedown', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
    } 
}); 

Krom değil ateş fare tekerleği genellikle

FF ve Chrome

Work
5

Ben olayı "tıklama" insanlar çözüm yerine alternatifler sunduğunda nefret ediyorlar, ancak çözümler zaten sağlandığından, kendi kuralımı kıracağım.

Orta tıklama özelliğinin devre dışı bırakıldığı web siteleri, gerçekten çok sıkıntı veriyor. Genel olarak orta tıklama yapıyorum çünkü yeni içeriğin yeni bir sekmede açılmasını ve mevcut içeriğin engellenmemiş bir görünümünü elde etmek istiyorum. Orta tıklama işlevini tek başına bırakabileceğiniz ve alakalı içeriğin tıklatılan öğenizin HREF özelliği aracılığıyla kullanılabilir hale gelebileceği her zaman, yapmanız gereken şeyin bu olduğuna kesinlikle inanıyorum.

İlgili konular