अजाक्स घटना के साथ एक पृष्ठ पर, मैं (आदि के लिये भेज डबल के साथ मुद्दों को रोकने के लिए)जावास्क्रिप्ट: पृष्ठ पर सभी कार्रवाइयों को अस्थायी रूप से अक्षम कैसे करें?
मैं वर्तमान onclick घटनाओं के लिए return false;
prepending द्वारा इस की कोशिश की जब तक अजाक्स कॉल रिटर्न सभी कार्यों को निष्क्रिय करना चाहते जब "ताला" पृष्ठ, और बाद में पृष्ठ को "अनलॉक" करते समय इसे हटा रहा है। हालांकि, "अनलॉक" होने के बाद क्रियाएं सक्रिय नहीं होती हैं - आप बस उन्हें ट्रिगर नहीं कर सकते हैं।
यह क्यों काम नहीं कर रहा है? नीचे उदाहरण पृष्ठ देखें। मेरा लक्ष्य प्राप्त करने के लिए कोई अन्य विचार?
उदाहरण कोड:
दोनों लिंक और बटन एक जे एस चेतावनी दिखा रहे हैं; लॉक दबाते समय, इवेंट हैंडलर अनलॉक करें जैसा कि पहले था, लेकिन काम नहीं करता ...?!
कोड अंत में त्रिनिदाद के साथ काम करने के लिए है, लेकिन बाहर भी काम करना चाहिए।
<html><head><title>Test</title>
<script type="text/javascript">
function lockPage()
{
document.body.style.cursor = 'wait';
lockElements(document.getElementsByTagName("a"));
lockElements(document.getElementsByTagName("input"));
if (typeof TrPage != "undefined")
{
TrPage.getInstance().getRequestQueue().addStateChangeListener(unlockPage);
}
}
function lockElements(el)
{
for (var i=0; i<el.length; i++)
{
el[i].style.cursor = 'wait';
if (el[i].onclick)
{
var newEvent = 'return false;' + el[i].onclick;
alert(el[i].onclick + "\n\nlock -->\n\n" + newEvent);
el[i].onclick = newEvent;
}
}
}
function unlockPage(state)
{
if (typeof TrRequestQueue == "undefined" || state == TrRequestQueue.STATE_READY)
{
//alert("unlocking for state: " + state);
document.body.style.cursor = 'auto';
unlockElements(document.getElementsByTagName("a"));
unlockElements(document.getElementsByTagName("input"));
}
}
function unlockElements(el)
{
for (var i=0; i<el.length; i++)
{
el[i].style.cursor = 'auto';
if (el[i].onclick && el[i].onclick.search(/^return false;/)==0)
{
var newEvent = el[i].onclick.substring(13);
alert(el[i].onclick + "\n\nunlock -->\n\n" + newEvent);
el[i].onclick = newEvent;
}
}
}
</script>
<style type="text/css">
</style>
</head>
<body>
<h1>Page lock/unlock test</h1>
<p>Use these actions to lock or unlock active elements on the page:
<a href="javascript:lockPage()">lock</a>,
<a href="javascript:unlockPage()">unlock</a>.</p>
<p>And now some elements:</p>
<a onclick="alert('This is the action!');return false;" href="#">link action</a>
<input type="button" value="button action" onclick="alert('This is another action!')"/>
</body>
</html>
धन्यवाद लोग आपके विचारों और जवाब के लिए।
अब मुझे लगता है कि मैं तार और काम करता है, जो स्पष्ट रूप से काम नहीं कर सकता को मिलाया है देखते हैं; (
मैं स्पष्ट कर दिया जाना चाहिए था कि हम जो घटना से निपटने बनाने के कुछ वेब परिवार कल्याण और टैग पुस्तकालयों (त्रिनिडाड) का उपयोग (और अजाक्स) कोड, इसलिए मैं इसे सीधे संपादित नहीं कर सकता या सिंक्रोनस अजाक्स इत्यादि का उपयोग नहीं कर सकता।
इसके अलावा, अजाक्स केवल एक परिदृश्य है जहां यह कोड निष्पादित किया जाना चाहिए। इसका उद्देश्य उपयोगकर्ता को दोबारा सबमिट करने से रोकना है पेज/एक्शन, जो गैर-अजाक्स पृष्ठों के लिए भी प्रासंगिक है, जहां आप एक बटन पर डोलबे-क्लिक कर सकते हैं। मुझे पता है कि यह वास्तव में सुरक्षित नहीं है, और यह केवल नेविगेशन प्राप्त करने से बचने के लिए "सुविधा" चीज़ बनना है त्रुटि पृष्ठ अक्सर (हमारे पास सर्वर-साइड सुरक्षा है, ज़ाहिर है)।
तो, शायद div ओवरले को आजमाएगा।
धन्यवाद,
क्रिस्टोफ।
धन्यवाद, लेकिन दुर्भाग्य से त्रिनिदाद ढांचे द्वारा एक्शन कोड उत्पन्न होता है और मैं इसे सीधे बदल नहीं सकता हूं। यही कारण है कि मुझे इवेंट हैंडलर कोड बदलने के लिए जेएस का उपयोग करना होगा। – ami
क्या आप क्रियाओं को "लपेट" सकते हैं: फ़ंक्शन thingo_wrap (ई) { यदि (actions_disabled) झूठी वापसी करता है; मूल_टर्न (ई) } ऊपर वैकल्पिक विकल्प भी देखें। – NickZoic
अच्छा विचार ... मैं इसे सीधे नहीं कर सकता, लेकिन कार्रवाई को संशोधित करने के लिए शायद कुछ जेएस का उपयोग कर सकता हूं। मेरा मूल समाधान काम नहीं करता है, ऐसा लगता है कि मैं फ़ंक्शंस और स्ट्रिंग्स को मिश्रित कर रहा हूं, है ना? मैं इसे आज़माउंगा। वैकल्पिक रूप से, मैं शायद मूल कार्रवाई को संग्रहीत करने के लिए मानचित्र का उपयोग कर सकता हूं और बाद में इसे पुनर्स्थापित कर सकता हूं ... – ami