2010-11-28 4 views
5

मैं, onkeypress घटनाओं ENTER कब्जा कि jQuery में एक कस्टम ईवेंट बनाने के लिए इतना है कि मैं इस तरह से हर बार कोड करने के लिए नहीं होगा चाहते हैं:मैं jQuery में एंटर ईवेंट पर कस्टम कैसे बना सकता हूं?

if(e.keyCode == 13) { 
    // event code here 
} 

दूसरे शब्दों में, मैं कोड करने में सक्षम होना चाहते हैं इस तरह:

$("selector").bind("enter", function(){ 
    // event code here 
}); 

उत्तर

10

आधुनिक jQuery (1.7 और ऊपर) .on() का उपयोग करता ईवेंट हैंडलर्स बाध्य करने के लिए: jQuery के

// delegate binding - replaces .live() and .delegate() 
$(document.body).on("keyup", ":input", function(e) { 
    if(e.which == 13) 
    $(this).trigger("enter"); 
}); 

// direct binding - analogous to .keyup() 
$(":input").on("keyup", function(e) { 
    if(e.which == 13) 
    $(this).trigger("enter"); 
}); 

पुराने संस्करण निम्न विधियों का उपयोग करें। आपके पास सभी तत्वों के लिए एक .live() या .delegate() ईवेंट हैंडलर हो सकता है। तो फिर इस तरह, अपने कस्टम ईवेंट ट्रिगर करने के उपयोग करते हैं:

$(document.body).delegate(":input", "keyup", function(e) { 
    if(e.which == 13) 
    $(this).trigger("enter"); 
}); 

किसी भी :input तत्व आप वास्तव में आपके पास क्या है कर सकता है के लिए:

$("selector").bind("enter", function(){ 
    //enter was pressed! 
}); 

You can test it out here

+0

धन्यवाद! भी, पहली बार मैं jsfiddle.com के बारे में सुनता हूं। बहुत ही सुविधाजनक। – Ovesh

4
$("selector").keyup(function (e) { 
    if (e.keyCode == 13) { 
    $(this).trigger("enter"); 
    } 
}).bind("enter", function() { 
    // event code here 
}); 

यह एक अच्छा विचार namespaced घटना नाम का उपयोग करने, गलती से कस्टम घटनाओं का उपयोग करता है अन्य jQuery कोड के साथ संघर्ष की संभावना को कम किया जा सके। तो "enter" के बजाय आप "enter.mywebapp" या कुछ इसी तरह का उपयोग कर सकते हैं। आपके द्वारा उपयोग की जाने वाली अधिक कस्टम घटनाओं को और अधिक समझ में आता है।

+0

नामस्थान * घटना के बाद * आते हैं, उदा। '" enter.mywebapp "' :) –

+0

@ निक: फिक्स्ड, धन्यवाद। – Tomalak

संबंधित मुद्दे