मैं कैसे unobtrusively जावास्क्रिप्ट और प्रोटोटाइप के साथ बटन प्रस्तुत निष्क्रिय कर सकते हैं?

वोट
1

तो मैंने पाया इस सिफारिश, लेकिन मैं काफी कैसे यह पता लगाने नहीं कर पा रहे।

इस कोड को मैं मूल रूप से के साथ शुरू किया है:

   function greySubmits(e) {
      var value = e.srcElement.defaultValue;
      // This doesn't work, but it needs to
      $(e).insert('<input type=hidden name=commit value=' + value + ' />');

      // This causes IE to not submit at all
      $$(input[type='submit']).each(function(v) {v.disabled = true;})
   }

   // This works fine
   Event.observe(window, 'load', function() {
     $$(input[type='submit']).each(function(e) {
        Event.observe(e, 'click', greySubmits);
     });
  });

वैसे भी, मैं बहुत करीब हूँ, लेकिन मैं किसी भी प्राप्त करने के लिए आगे नहीं कर पा रहे।

सब पर किसी भी मदद के लिए धन्यवाद!

अपडेट : क्षमा करें, मुझे लगता है मैं पूरी तरह से स्पष्ट नहीं था। मैं प्रस्तुत बटन के सभी निष्क्रिय करने के लिए जब कोई एक सबमिट बटन पर क्लिक करता है चाहते हैं। लेकिन मैं करते सबमिट बटन तो सर्वर जानता है कि कौन सा बटन मैं क्लिक किया है, इसलिए डालने कॉल के महत्व के साथ भेजना होगा। (नोट: डालने करता नहीं तत्व आप उस पर फोन का एक बच्चा पैदा करते हैं।) और फिर बटन प्रस्तुत अक्षम करने के बाद मैं के रूप में आईई आप बटन अक्षम करने के बाद प्रस्तुत नहीं होगा, प्रस्तुत बटन प्रस्तुत कॉल की युक्त प्रपत्र कॉल करने के लिए की जरूरत है। क्या इसका कोई मतलब है?

23/02/2009 को 00:02
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
4

आप वास्तव में क्या करना है इस सवाल का जवाब कहते हैं की जरूरत है:

onclick "में इसके बटन को निष्क्रिय मत" "है, लेकिन यह बचाने के लिए, और यह प्रपत्र के ऑनसबमिट में करते हैं।"

greySubmits में तो () लाइन है कि छिपा मूल्य सेट रखने के लिए, लेकिन लाइन है कि सभी प्रस्तुत बटन को निष्क्रिय हटा दें।

फिर अपने ऑनलाइन में एक और ईवेंट हैंडलर जोड़ने - फार्म के लिए, नहीं प्रस्तुत बटन - कि अक्षम करता है।

 function reallyGreySubmits(e) {
     // This causes IE to not submit at all
     $$("input[type='submit']").each(function(v) {v.disabled = true;})
 }

 Event.observe(window, 'load', function() {
     $$("input[type='submit']").each(function(e) {
        Event.observe(e, 'click', greySubmits);
     });
     $$("form").each(function(e) {
        Event.observe(e, 'submit', reallyGreySubmits);
     });
  });

एक अन्य विकल्प है, जो मैं का उपयोग किया है प्रविष्टियों पर अक्षम नहीं है, लेकिन दो तत्वों के बीच दृश्यता स्वैप करने के लिए है। क्लिक पर, प्रविष्टियों पर छिपा निशान, और फिर दिखाई एक div या कुछ अन्य तत्व यह है कि के रूप में "अक्षम" उनके स्थान पर प्रदर्शित करता है बनाते हैं।

27/02/2009 को 16:29
का स्रोत उपयोगकर्ता

वोट
1

मुझे अंत में यह काम करने के लिए मिला है। रयान तो मदद की :-) कोड यह मैं उसे वोट दें होगी:

  function replaceSubmit(e) {
    var el = e.element();
    Element.insert(el, { 'before': '<input type="hidden" name="' + el.name + '" value="' + el.value +'" />'});
  }

  function greySubmits(e) {
    // Don't disable the submit if the submit was stopped with a return(false)
    if (e.returnValue) {
      $$("input[type='submit']").each(function(v) {v.disabled = true;})
    }
  }

  function fixButtons() {
    $$("input[type='submit']").each(function(v) {
        if (Element.hasClassName(v, 'disabled')) {
          v.disabled = true;
        } else {
          v.disabled = false;
        }
      });
  }

  Event.observe(window, 'load', function() {
      fixButtons();
      $$("input[type='submit']").each(function(e) {
          Event.observe(e, 'click', replaceSubmit);
        });
      $$("form").each(function(e) {
          Event.observe(e, 'submit', greySubmits);
        });
    });

fixButtons इतनी है कि जब लोगों को वापस बटन पर क्लिक करें पेज सभी बटन ठीक कर देंगे है। और अगर आप एक बटन को निष्क्रिय करना चाहते हैं और यह नहीं एक पीठ पर पुन: सक्षम है तो आप सिर्फ यह विकलांग के एक वर्ग दे।

28/02/2009 को 23:39
का स्रोत उपयोगकर्ता

वोट
0

यहाँ है कि मैं क्या, साथ जो ऊपर से अनुकूलित है आया है। फिक्स्ड इतना है कि यह प्रोटोटाइप के बंद कर दिया विशेषता का उपयोग रद्द किए गए ईवेंट प्रचार का पता लगाता है।

अन्य परिवर्तनों लंबे समय तक चर नाम (मैं हमेशा के बारे में ई घटना या तत्व है कि क्या भ्रमित हो), और एक समारोह है कि प्रतिस्थापन आदानों अगर फ़ॉर्म प्रविष्टि को रद्द कर दिया है हटाया उपयोग शामिल है। ब्राउज़र पर वापस दबाने मेरी कार्यान्वयन, पेज प्रदर्शित नहीं करता है के रूप में यह था जब उपयोगकर्ता इसे छोड़ दिया में बजाय इसे refetched जा करने के लिए (मैं रेल उपयोग कर रहा हूँ) लगता है, इसलिए मैं भी उस हिस्से को हटा दिया है।

मैं अपने आवेदन में आदानों के बजाय बटन का उपयोग कर रहा हूँ ताकि हिस्सा भी बदल गया है।

function replaceSubmit(event) {
    var element = event.element();
    Element.insert(element, { 'before': '<input type="hidden" name="' + element.name + '" value="' + element.value +'" class="button_replacement">'});
}

function removeReplacementSubmits() {
    $$('input.button_replacement').each(function(button) {
        button.remove();
    });
}

function greySubmits(event) {
    // Don't disable the submit if the submit was stopped with a return(false)
    if (event.stopped === true) {
        removeReplacementSubmits();
    } else {
        $$('button[type="submit"]').each(function(button) {
            button.disabled = true;
            button.innerHTML += '&#133;';
        });
    }
}

Event.observe(window, 'load', function() {
    $$("button[type='submit']").each(function(element) {
        Event.observe(element, 'click', replaceSubmit);
    });
    $$("form").each(function(element) {
        Event.observe(element, 'submit', greySubmits);
    });
});
22/02/2012 को 08:28
का स्रोत उपयोगकर्ता

वोट
1
document.observe("dom:loaded", function(){
   $$('form').find(function(thisForm) {
      Event.observe(thisForm, 'submit', function(event) {
         $$('input[type="submit"]').find(function(input) {
            input.value = 'Please wait ...';
            input.setAttribute('disabled',true);
            });
         });
      });       
   });
24/05/2012 को 13:49
का स्रोत उपयोगकर्ता

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