2010-10-03 20 views
8

jQuery kullanıyorum ve aramayı başlatmak için bir arama alanına veri girdikten sonra kullanıcının enter tuşuna basmasını mümkün kılmak istiyorum.jQuery keyup ve Safari'ye 'enter' girme

 $('#textSearch').keyup(function (event) { 
      if (event.keyCode == '13') { 
       doSearch(); 
      } 
      return false; 
     }); 

Bu Firefox ve IE mükemmel ama hiç Safari'de çalışır:

Aşağıdaki kodu kullanıyorum. Olan şey, safariye girdiğimde ve istediğim şey olmadığında formun gönderilmesi.

Onsubmit = "false;" form çalışması için ama form etiketi bir asp.net sayfasının ana sayfasında olduğundan ve başka sayfalarda gönderilecek forma ihtiyacım olduğundan bir seçenek değildir.

Bu özelliğin Safari'de çalışmasının bir yolu var mı?

DÜZENLEME: Ben de sadece yerine doSearch() fonksiyonunun bir uyarı göstermeye çalıştık. Uyarı iyi görünüyor ama bundan sonra form gönderiliyor.

cevap

4

Tarayıcılar olay bir gönderme tetikler hangileri olduğu değişebilir engeller. Bu durumda, keydown olayı üzerinde Safari sunuluyor olabilir.
Sen işaretlemeyi değiştirmeden göndermeniz durumunda izlemek ve iptal olabilir: Daha sonra keyup olayı dinleyip yapıyorsun şimdi olduğu gibi her şeyin üstesinden gelebilecek

$('#the-id-of-the-form').submit(function(e) { 
    e.preventDefault(); 
}); 

.

+0

Mükemmel çalıştı! Teşekkürler! :) – Martin

3

bu deneyin:

$('#textSearch').keyup(function (event) { 
     var key = event.keyCode || event.which; 

     if (key === 13) { 
      doSearch(); 
     } 
     return false; 
    }); 
+0

teşekkürler! Bunu denedim ama farketmedi. Ayrıca, daha fazla ayrıntıyla da sorunu güncelledim. – Martin

1

eklenti deault

$('#textSearch').keyup(function (event) { 
    if (event.keyCode == '13') { 
     event.preventDefault(); 
     doSearch(); 
    } 
    return false; 
}); 
+0

Teşekkürler ama yine de formu gönderir .. – Martin

0

"Keydown", çünkü benim için çalışmadı çünkü "keydown" kullanıyorum. Ayrıca, bu girişin AJAX ile eklediğim girdi alanları ile, yani "canlı" olduğu için devre dışı bırakılması gerekti.

Alana "değiştir" işleyicisini bağlamanız gerekir. Bu sürüm alandan çıkar ("bulanıklık"), daha sonra sahada bir değişikliği tetikler, ardından değişikliği tetikler. Bulanıklık olmadan, değişim iki kez tetiklenir!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
} 
); 
0

"Anahtar" nedeniyle "benim için çalışmaz" çünkü "keydown" kullanıyorum. Ayrıca, bu girişin AJAX ile eklediğim girdi alanları ile, yani "canlı" olduğu için devre dışı bırakılması gerekti.

Alana "değiştir" işleyicisini bağlamanız gerekir. Bu sürüm alandan çıkar ("bulanıklık"), daha sonra sahada bir değişikliği tetikler, ardından değişikliği tetikler. Bulanıklık olmadan, değişim iki kez tetiklenir!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
});