क्लिक करने के बाद सबमिट बटन को निष्क्रिय कैसे करें?


13

नोड पेजों पर भी ड्रुपल कई फॉर्म सबमिट्स को नहीं रोकता है। यह QA सर्वर साइड पर इसे ठीक करने का सुझाव देता है।

क्लिक करने के बाद मैं सबमिट बटन को कैसे निष्क्रिय कर सकता हूं?

कोई और उपाय?


क्या Drupal का फ़ॉर्म API अपने फ़ॉर्म टोकन मान की जाँच के लिए डबल-सबमिट करने से नहीं रोकता है? एक ही टोकन के साथ दो बार फॉर्म जमा नहीं कर सकते?
जॉनथन एलमोर

जवाबों:


12

यह केवल देव में है लेकिन Hide Submit मॉड्यूल ट्रिक करेगा। सुविधाओं में से एक है:

क्लिक करने के बाद सबमिट बटन छिपाएं (या अक्षम करें)

मैंने अभी इसे एक देव साइट पर स्थापित किया है और यह नोड ऐड फॉर्म के लिए अच्छी तरह से काम करता है; जब आप सबमिट बटन पर क्लिक करते हैं तो इसे छिपाया जाता है और एक लोडिंग छवि और एक 'कृपया प्रतीक्षा करें ...' संदेश के साथ प्रतिस्थापित किया जाता है, इससे पहले कि फॉर्म अंतिम रूप से सबमिट किया जाता है। मैंने इसे किसी अन्य रूप में नहीं आजमाया है।


अपने स्वयं के कस्टम मॉड्यूल में रूपों पर काम करने के लिए छिपाने के जमा मॉड्यूल कैसे प्राप्त करें, इस पर कोई विचार? मैं उम्मीद कर रहा था कि यह साइट चौड़ा होगा, लेकिन ऐसा प्रतीत नहीं होता।
user785179

@ user785179 देखो कि यह कैसे लागू होता है hook_form_alter()- यदि यह उपयोग कर रहा है hook_form_FORMID_alter(), तो इसे सामान्य पर स्विच करें hook_form_alter()। यदि यह सामान्य है hook_form_alter(), तो अंदर के साथ, कुछ जोड़ने के orलिए 'इस में है if
मोलॉट

इस समाधान के साथ सावधान रहें - छिपाएं जमा मॉड्यूल अजाक्स अपलोड को तोड़ता है, स्वत: पूर्ण समस्याओं का कारण बनता है, और कुछ मामलों में सबमिट बटन पर पहले क्लिक पर कुछ भी नहीं करने का कारण बनता है। मुझे बस इसे किसी साइट से अनइंस्टॉल करना था।
जेनमैप्टन

@ जेन स्ट्रेंज, मैं वर्षों से दर्जनों साइटों में इसका उपयोग कर रहा हूं, जैसे कि कोई समस्या देखे बिना। शायद आप एक और मॉड्यूल स्थापित किया है कि यह साथ हस्तक्षेप
क्लाइव

10

यहाँ Drupal 7 के लिए समाधान है। कोड Hide Submit मॉड्यूल का सरलीकृत संस्करण है।

यह कोड "अधिक जोड़ें" बटन और AJAX रूपों के साथ भी ठीक काम करता है।

Drupal.behaviors.hideSubmitButton = {
  attach: function(context) {
    $('form.node-form', context).once('hideSubmitButton', function () {
      var $form = $(this);
      $form.find('input.form-submit').click(function (e) {
        var el = $(this);
        el.after('<input type="hidden" name="' + el.attr('name') + '" value="' + el.attr('value') + '" />');
        return true;
      });
      $form.submit(function (e) {
        if (!e.isPropagationStopped()) {
          $('input.form-submit', $(this)).attr('disabled', 'disabled');
          return true;
        }  
      });
    });
  }
};

मैं इसे व्यवस्थापक विषय में लागू करना चाहता हूं। फ़ाइल sitename.js बनाया और उसमें कोड के ऊपर प्रतिलिपि बनाई गई। यह काम नहीं कर रहा है। क्या मुझे चीजों को समायोजित करना चाहिए?
जस्टमे

@Justme आपने अपना sitename.js फ़ाइल कहाँ रखा है? यदि किसी मॉड्यूल या सबटैम में आपको या तो इसे .info फ़ाइल में जोड़ना होगा, तो यह लोड हो जाता है, या इसे पृष्ठ पर लाने के लिए drupal_add_js () कहीं और कॉल करें। क्या आप इसे पृष्ठ स्रोत में जोड़कर देख सकते हैं?
जेनमल्टन

Thxs ने इसे हल किया। मुझे नहीं पता था कि यह बीच होना चाहिए: (फ़ंक्शन ($) {और}) (jQuery); js फ़ाइल में। शर्म की तरह काम करता है !!
Justme

0

सबसे आसान तरीका फॉर्म सबमिट करने के बाद बटन को निष्क्रिय करने के लिए थीम आधारित जावास्क्रिप्ट समाधान करना है। Theme.info फ़ाइल में, अपनी जावास्क्रिप्ट फ़ाइल डालें ताकि इसे थीम एपीआई द्वारा लोड किया जा सके।

scripts[] = js/themename-script.js

अब थीमनेम-script.js में निम्न प्रकार देखने के लिए Drupal.behaviors.themename अनुभाग जोड़ें:

Drupal.behaviors.themename = function()
{
  $('.node-form').submit(function(){
    $('#edit-submit').attr("disabled", "disabled");
    $('#edit-preview').attr("disabled", "disabled");
  });
}

तो प्रवाह इस प्रकार है:

  1. थीम जावास्क्रिप्ट को लोड करता है
  2. Drupal.behaviors.themename पेज लोड पर निकाल दिया गया है
  3. नोड ऐड फॉर्म के फॉर्म जमा करने पर (उपरोक्त उदाहरण में आधारित वर्ग, इसे फॉर्म के प्रकार पर कस्टमाइज़ किया जा सकता है) सबमिट बटन (सबमिट और पूर्वावलोकन) को अक्षम करें ताकि इसे फिर से क्लिक न किया जा सके।

मुझे यकीन है कि अगर कुछ अजाक्स प्रसंस्करण है कि ऊपर खतरनाक हो सकता है और फार्म जमा फिर से कभी नहीं किया जा सकता है अगर फॉर्म_एपी सत्यापन में कोई त्रुटि पकड़ी जाती है तो यह परीक्षण करें और अपनी आवश्यकताओं को पूरा करने के लिए अनुकूलित करें। मैंने दोनों बटन अक्षम कर दिए हैं क्योंकि आप अभी भी पूर्वावलोकन बटन पर क्लिक कर सकते हैं जबकि सबमिट बटन अक्षम था। जाहिर है कि आपका दुस्साहस मेरे अलग-अलग हैं।


2
आप पुरानी Drupal.behaviorsघोषणा शैली का उपयोग कर रहे हैं; यह Drupal 7 के लिए काम नहीं करेगा। यह होना चाहिए Drupal.behaviors.themename = { attach: function (context, settings) { // ...। देखें Drupal 7 में जावास्क्रिप्ट प्रबंध अधिक जानकारी के लिए
क्लाइव

घोषणा शैली तय
यूजीन फिदेलिन

इस लिपि 'नोड-फॉर्म' से किन मूल्यों को प्रतिस्थापित किया जाना चाहिए?
pal4life

मैंने इस काम को व्यवस्थापक विषय में करने की कोशिश की लेकिन कोई भाग्य नहीं। व्यवस्थापक नाम के साथ नाम बदलें और sitename.js में पूरा कोड कॉपी किया और थीम जानकारी फ़ाइल में इसे जोड़ा। फिर भी मुझे आसानी से एक ही फॉर्म के अधिक सबमिशन मिलते हैं।
जस्टमे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.