सबसे आसान तरीका यह है कि अपने कोड को एक क्लोजर में लपेटें और मैन्युअल रूप से केवल उन वेरिएबल्स को उजागर करें जिनकी आपको वैश्विक स्तर पर आवश्यकता है:
(function() {
window['varName'] = varName;
})();
क्रिसेंट फ्रेश की टिप्पणी को संबोधित करने के लिए: वैश्विक चर को पूरी तरह से परिदृश्य से हटाने के लिए, डेवलपर को प्रश्न में ग्रहण की गई कई चीजों को बदलने की आवश्यकता होगी। यह इस तरह बहुत अधिक दिखाई देगा:
जावास्क्रिप्ट:
(function() {
var addEvent = function(element, type, method) {
if('addEventListener' in element) {
element.addEventListener(type, method, false);
} else if('attachEvent' in element) {
element.attachEvent('on' + type, method);
} else if('on' + type in element) {
var oldMethod = element['on' + type],
newMethod = function(e) {
oldMethod(e);
newMethod(e);
};
} else {
element['on' + type] = method;
}
},
uploadCount = 0,
startUpload = function() {
var fil = document.getElementById("FileUpload" + uploadCount);
if(!fil || fil.value.length == 0) {
alert("Finished!");
document.forms[0].reset();
return;
}
disableAllFileInputs();
fil.disabled = false;
alert("Uploading file " + uploadCount);
document.forms[0].submit();
};
addEvent(window, 'load', function() {
var frm = document.forms[0];
frm.target = "postMe";
addEvent(frm, 'submit', function() {
startUpload();
return false;
});
});
var iframe = document.getElementById('postHere');
addEvent(iframe, 'load', function() {
uploadCount++;
if(uploadCount > 1) {
startUpload();
}
});
})();
HTML:
<iframe src="test.htm" name="postHere" id="postHere"></iframe>
आपको इनलाइन ईवेंट हैंडलर की आवश्यकता नहीं है<iframe>
, यह अभी भी इस कोड के साथ प्रत्येक लोड पर फायर करेगा।
लोड घटना के संबंध में
यहां एक परीक्षण मामला दिखाया गया है कि आपको इनलाइन onload
घटना की आवश्यकता नहीं है । यह एक ही सर्वर पर एक फ़ाइल (/emptypage.php) को संदर्भित करने पर निर्भर करता है, अन्यथा आपको इसे केवल एक पृष्ठ में पेस्ट करने और इसे चलाने में सक्षम होना चाहिए।
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>untitled</title>
</head>
<body>
<script type="text/javascript" charset="utf-8">
(function() {
var addEvent = function(element, type, method) {
if('addEventListener' in element) {
element.addEventListener(type, method, false);
} else if('attachEvent' in element) {
element.attachEvent('on' + type, method);
} else if('on' + type in element) {
var oldMethod = element['on' + type],
newMethod = function(e) {
oldMethod(e);
newMethod(e);
};
} else {
element['on' + type] = method;
}
};
var iframe;
try {
iframe = document.createElement('<iframe name="postHere">');
} catch (e) {
iframe = document.createElement('iframe');
iframe.name = 'postHere';
}
iframe.name = 'postHere';
iframe.id = 'postHere';
iframe.src = '/emptypage.php';
addEvent(iframe, 'load', function() {
alert('iframe load');
});
document.body.appendChild(iframe);
var form = document.createElement('form');
form.target = 'postHere';
form.action = '/emptypage.php';
var submit = document.createElement('input');
submit.type = 'submit';
submit.value = 'Submit';
form.appendChild(submit);
document.body.appendChild(form);
})();
</script>
</body>
</html>
हर बार जब मैं सफ़ारी, फ़ायरफ़ॉक्स, IE 6, 7 और 8 में सबमिट बटन पर क्लिक करता हूँ तो आग लग जाती है।