2011-10-28 17 views
6

मैं एचटीएमएल, जेएस में एक कस्टम इवेंट बनाने की तलाश में हूं।एचटीएमएल में कस्टम इवेंट, जावास्क्रिप्ट

<input type="text" oncustombind="foo(event);" /> 

मैं ऐसा कैसे बना सकता हूं? 'oncustombind' एक कस्टम इवेंट है जिसे मैं बनाना चाहता हूं। मैं oncustombind विशेषता में परिभाषित समारोह/कोड को कॉल करने में सक्षम होना चाहिए। साथ ही, मुझे ईवेंट ऑब्जेक्ट में कुछ डेटा पास करने की आवश्यकता है।

मैं jquery, YUI जैसे किसी भी पुस्तकालय का उपयोग नहीं करना चाहता।

किसी भी मदद की सराहना की जाएगी।

+2

HTML में एक तरफ इनलाइन जावास्क्रिप्ट एक बड़ा गंदे हैक है। ऐसा मत करो – Raynos

+0

चूंकि प्रश्न पोस्ट किया गया था समय बदल गया है। वर्तमान में वेब घटक जेएस ढांचे को बदलने के लिए एक व्यवहार्य तरीका बन रहे हैं। इनलाइन कस्टम इवेंट होने के कारण वास्तव में कोड लिखने के लिए वास्तव में उपयोगी होगा जिसे आसानी से पढ़ा जा सकता है (कोणीय/प्रतिक्रिया के समान)। एक अच्छी चाल 'ऑब्जेक्ट.साइन' का उपयोग करके चिल्ड्रेन डोम तत्व के साथ वेब घटक के 'इस' संदर्भ को साझा करना है। इस तरह किसी भी चयनित डोम तत्व को वेब घटक वर्ग में परिभाषित विधियों तक पहुंच हो सकती है। इनलाइन कस्टम इवेंट हैंडलर से कस्टम इवेंट तक पहुंचने के लिए यह भी अच्छा होगा। –

उत्तर

9

आप चाहते हैं एक CustomEvent

वे लेकिन ब्राउज़र समर्थन के साथ काम करने के लिए आसान होना चाहिए गरीब है। हालांकि DOM-shim को ठीक करना चाहिए।

var ev = new CustomEvent("someString"); 
var el = document.getElementById("someElement"); 
el.addEventListener("someString", function (ev) { 
    // should work 
}); 
el.dispatchEvent(ev); 
4

new Function और with का उपयोग करना बुरा व्यवहार है, लेकिन यह निम्नानुसार पूरा किया जा सकता है: http://jsfiddle.net/pimvdb/72GwE/13/

function trigger(elem, name, e) { 
    var func = new Function('e', 

     'with(document) {' 
    + 'with(this) {' 
    + elem.getAttribute('on' + name) 
    + '}' 
    + '}'); 

    func.call(elem, e); 
} 
निम्नलिखित HTML

:

<input type="text" oncustombind="console.log(e, type, getElementById);" id="x"> 

तो गति प्रदान घटना की तरह:

trigger(document.getElementById('x'), 'custombind', {foo: 123}); 
+1

@ रेनॉस: आप 'विंडो', 'दस्तावेज़', 'घटना' और 'e' को दायरे में रखने के लिए क्या उपयोग करेंगे? 'के साथ ' – pimvdb

+0

की तुलना में कोई बेहतर तरीका नहीं है? 'विंडो', 'दस्तावेज़', 'elem' और' e' पहले से ही दायरे में हैं। – Raynos

+0

@ रेनॉस: एचटीएमएल इवेंट विशेषताओं में आप विशेषताओं और 'दस्तावेज़' के कार्यों को स्वचालित रूप से प्राप्त कर सकते हैं, उदा। 'getElementById'' document.' के बिना प्रीपेड। – pimvdb

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