कैसे प्रोटोटाइप नए तत्व () निर्माता के साथ ईवेंट हैंडलर जोड़ने के लिए?

वोट
0

मैं (यह सिर्फ ठीक काम करता है) इस तरह नए तत्व निर्माता के साथ अपने दस्तावेज़ में एक img टैग डालने कर रहा हूँ:

$('placeholder').insert(new Element(img, {id:'something', src:myImage}))

मैं जब इस छवि को लोड एक समारोह को गति प्रदान करना चाहते हैं, लेकिन मैं सही सिंटैक्स को समझ नहीं सकता। मैं कर रहा हूँ लगता है कि यह कुछ इस तरह (जो काम नहीं करता है) है।

$('placeholder').insert(new Element(img, 
    {id:'something', src:myImage, onload:function(){alert(MOO)}}))

मैं कोड की एक ही पंक्ति में ऐसा करने की उम्मीद कर रहा हूँ और एक घटना पर्यवेक्षक अलग से संलग्न करने के लिए है करने के लिए नहीं।

संपादित करें: घटना जब तत्व है पंजीकृत होना आवश्यक है बनाया , बाद नहीं। घटना से पहले छवि लोड जुड़ा हुआ है, तो घटना कभी सक्रिय नहीं होगा।

10/11/2008 को 18:43
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
0

आप समारोह कहीं और ले जाते और नाम से यह कॉल करने के लिए हो सकता है

$('placeholder').insert(new Element("img", 
    {id:'something', src:myImage, onload:"javascript:moo()"}))

function moo() {
    alert("MOO");
}

बेशक, क्योंकि insertरिटर्न तत्व, आप इनलाइन सकता हैElement.observe

$('placeholder').insert(new Element("img", 
    {id:'something', src:myImage})).observe('load', function(){alert("MOO")});
10/11/2008 को 19:03
का स्रोत उपयोगकर्ता

वोट
2

प्रयत्न

$('placeholder').insert(new Element("img", {
    id: 'something', 
    src:myImage
}).observe('load', function() {
    // onload code here
}));
10/11/2008 को 19:04
का स्रोत उपयोगकर्ता

वोट
0

"ऑनलोड" कोड एक ईवेंट हैंडलर में लिपटे होने की जरूरत नहीं होनी चाहिए। आप अनिवार्य रूप से वहीं तत्व लोड कर रहे हैं, बस डालने के बाद कोड डाल दिया।

var img = new Element('img', {id: 'something', src:'myImage.jpg'});
$('placeholder').insert(img);
// Element has loaded! It can now be mucked around with.
// The onload code goes here...
04/12/2008 को 00:05
का स्रोत उपयोगकर्ता

वोट
0

यह एक तरह से बेकार है, लेकिन यह आप क्या करने की जरूरत है:

$('placeholder').insert(new Element("img", {
    id:'something', src:myImage, onload:'alert("MOO")'
}));

विशेषताओं में मूल्यों सिर्फ स्ट्रिंग के रूप में सम्मिलित किया गया हो वस्तु, इसलिए जब आप करते हैं "ऑनलोड: function () {...}" यह में बदल जाता है:

<img onload="function() {...}" />

जो वास्तव में समारोह के अंदर कोड निष्पादित नहीं करता है, यह सिर्फ एक नई अज्ञात समारोह है कि निष्पादित नहीं होगा जब तक आप इसे करने के लिए बता परिभाषित करता है।


आप इसके बारे में एक निंजा बनना चाहता था, तो आप कुछ इस तरह कर सकता है:

var moo = function() { alert("MOO"); };
$('placeholder').insert(new Element("img", {
    id:'something', src:myImage, onload:'(' + moo + ')()'
}));

या और भी:

$('placeholder').insert(new Element("img", {
    id:'something', src:myImage, onload:'(' + function() { alert("MOO"); } + ')()'
}));

जबकि एक तरह से पागल, उन विकल्पों आप के साथ मामले में आप इसकी आवश्यकता है काम करने के लिए वास्तविक समारोह वस्तु दे।

11/12/2008 को 21:29
का स्रोत उपयोगकर्ता

वोट
4

इस मामले में, सबसे अच्छा समाधान प्रोटोटाइप का उपयोग नहीं करने के लिए या कम से कम विशेष रूप से नहीं है। यह काम:

var img = new Element('img',{id:'logo',alt:'Hooray!'});
img.onload = function(){ alert(this.alt); };
img.src = 'logo.jpg';

कुंजी ऑनलोड स्थापित कर रही है के बजाय सीधे दे प्रोटोटाइप का आवरण यह तुम्हारे लिए क्या है, और अंतिम src सेट (वास्तव में इस बारे में सुनिश्चित नहीं है, लेकिन मैं यह पिछले सुरक्षित रहने के लिए करते हैं)।

एक-लाइनर्स अहंकारी हैं। ऊपर स्थानीय चर के समुचित उपयोग के साथ बस के रूप में अच्छा है। आप एक लाइनर होना आवश्यक है, तो एक आवरण समारोह बना सकते हैं या उचित काम सुनिश्चित करने के लिए प्रोटोटाइप कोर हैक (एक पैच सबमिट!)।

10/10/2009 को 19:38
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more