जिस तरह से मैंने यह किया है, पेज लोड होने पर इनपुट के प्रारंभिक मानों को संग्रहीत करने के लिए जावास्क्रिप्ट का उपयोग करना है। तब मेरे पास एक पहले से लोड हैंडलर है जो यह देखने के लिए जांच करता है कि पृष्ठ लोड होने के बाद से किसी भी इनपुट का अलग मूल्य है या नहीं। यदि कोई इनपुट बदल जाता है, तो यह उपयोगकर्ता को यह पुष्टि करने के लिए संकेत देता है कि वे पृष्ठ छोड़ना चाहते हैं, अगर वे रद्द करते हैं तो कार्रवाई रद्द कर दें। मेरे सबमिट तर्क में, मैंने एक झंडा सेट किया है जो पहले से लोड होने की जांच को रोकता रहता है, इसलिए सबमिट को प्रॉम्प्ट नहीं मिलता है।
मुझे संदेह है कि ऐसा करने के लिए एक jQuery प्लगइन है, लेकिन मैंने इसे लागू नहीं किया है क्योंकि मैंने jQuery का उपयोग करना शुरू कर दिया है। मेरा पहले कोड प्रोटोटाइप का इस्तेमाल किया।
संपादित करें: एक jQuery प्लगइन नहीं मिला, लेकिन मैं इसे अभी याद कर सकता था। यहां एक नमूना है कि मैं इसे कैसे कर सकता हूं। जाहिर है, और भी किया जा सकता है। नोट मैं इसे शुद्ध jQuery के साथ काम करने में सक्षम नहीं था - निश्चित रूप से क्यों नहीं, पॉपअप दो बार दिखाई देगा।
यह सभी इनपुट तत्वों के साथ काम करना चाहिए। हालांकि, आप बटन को अनदेखा/संभालने के लिए इसे बदलना चाहते हैं। मैंने केवल सबमिट बटन को अनदेखा करने के लिए इसे समायोजित किया है (इसलिए यह पॉपअप के बिना वापस पोस्ट कर सकता है)। यदि अन्य बटन प्रकार पृष्ठ को अनलोड कर सकते हैं, तो आपको उसे संबोधित करने की आवश्यकता हो सकती है।
var CheckOnClose = function() {
this.initialize();
}
CheckOnClose.prototype = {
submitting: false,
initialize: function() {
var that = this;
window.onbeforeunload = function() { return that.checkLeavePage(); }
},
isChanged: function() {
var changed = false;
$('input:not(:submit)').each(function() {
var iv = $(this).data('initialValue');
if ($(this).val() != iv) {
changed = true;
return false;
}
});
return changed;
},
setSubmitting: function() {
this.submitting = true;
},
checkLeavePage: function() {
if (!this.submitting && this.isChanged()) {
return 'You have some unsaved changes.';
}
}
}
var checker = new CheckOnClose();
$(document).ready(function() {
$(':input:not(:submit)').each(function() {
$(this).data('initialValue',$(this).val());
});
$(':submit').click(function() {
checker.setSubmitting();
});
});
बेशक jQuery/प्रोटोटाइप/अन्य पुस्तकालयों का भी उपयोग किया जा सकता है, लेकिन मूल कार्यान्वयन उपरोक्त स्निपेट जितना सरल है। – synhershko