सामान्य तरीके से जावास्क्रिप्ट में एक फार्म भरने के लिए

वोट
8

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

उदाहरण के लिए, मैं इस स्वरूप में हैं:

<form id=someform>
  <select name=option1>
    <option value=1>1</option>
    <option value=2>2</option>
  </select>
  <select name=option2>
    <option value=1>1</option>
    <option value=2>2</option>
  </select>
</form>

मैं इस तरह का कोई पैरामीटर स्ट्रिंग लेने में सक्षम होना चाहते हैं: option1=2&option2=1

और फिर क्वेरी स्ट्रिंग में विकल्प के आधार पर चुना सही बातें हैं।

मैं बदसूरत समाधान का एक प्रकार है, जहां मैं फार्म के बच्चों के माध्यम से जाने के लिए और देखें कि क्या उन्होंने विभिन्न कुंजी से मेल खाते हैं, तो मूल्यों को निर्धारित है, लेकिन मैं वास्तव में यह पसंद नहीं है।

मैं एक क्लीनर, चाहें सामान्य है कि किसी भी रूप (परम स्ट्रिंग सब ठीक चाबियाँ था कल्पना करते हुए) के लिए काम करेगा यह कर के रास्ते।

मैं प्रोटोटाइप जावास्क्रिप्ट पुस्तकालय का उपयोग कर रहा है, इसलिए मैं सुझाव है कि इसका लाभ उठाने के स्वागत करते हैं चाहते हैं।

संपादित करें: यह है कि क्या मैं अब तक (के लिए प्रोटोटाइप का उपयोग कर के साथ आ गया है Form.getElements(form))

function setFormOptions(formId, params) {
  params = params.split('&');
  params.each(function(pair) {
    pair = pair.split('=');
    var key = pair[0];
    var val = pair[1];
    Form.getElements(form).each(function(element) {
      if(element.name == key) {
        element.value = val;
      }
    });
  });
}

मुझे लगता है कि यह अभी भी हालांकि तेजी से / क्लीनर हो सकता है।

02/11/2008 को 18:41
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
1

आपने कहा था कि आप पहले से ही तत्वों के माध्यम से जा रहे हैं और मूल्यों की स्थापना। हालांकि, हो सकता है यह क्लीनर है कि तुम क्या है?

function setFormSelectValues(form, dataset) {
    var sel = form.getElementsByTagName("select");
    dataset.replace(/([^=&]+)=([^&]*)/g, function(match, name, value){
        for (var i = 0; i < sel.length; ++i) {
            if (sel[i].name == name) {
                sel[i].value = value;
            }
        }
    });                
}

इसके बाद आप अधिक अगर जरूरत की तुलना में सिर्फ तत्वों का चयन करने के लिए अनुकूल है कि हो सकता है।

02/11/2008 को 19:09
का स्रोत उपयोगकर्ता

वोट
3

इसे इस्तेमाल करे:

Event.observe(window, 'load', function() {
  var loc = window.location.search.substr(1).split('&');

  loc.each(function(param) {
      param = param.split('=');
      key = param[0];
      val = param[1];

      $(key).value = val;
  });
});

उपरोक्त कोड मानता है कि आप प्रत्येक प्रपत्र तत्व करने के लिए आईडी मूल्यों के साथ ही नाम आवंटित। यह रूप में पैरामीटर लेता है:

? कुंजी = मान और कुंजी = मान

या

? OPTION1 = 1 & OPTION2 = 2

आप यह सिर्फ तत्वों के लिए नाम पर रखने के लिए चाहते हैं, तो इसके बाद के संस्करण के बजाय का प्रयास करें:

Event.observe(window, 'load', function() {
  var loc = window.location.search.substr(1).split('&');

  loc.each(function(param) {
    param = param.split('=');
    key = param[0].split('_');

    type = key[0];
    key = key[1];
    val = param[1];

    $$(type + '[name="' + key + '"]').each(function(ele) {
      ele.value = val;
    });
});

इस कोड के रूप में पैरामीटर लेता है:

? Type_key = मान और type_key = मूल्य

या

? Select_option1 = 1 & select_option2 = 2
02/11/2008 को 19:32
का स्रोत उपयोगकर्ता

वोट
6

आप प्रोटोटाइप का उपयोग कर रहे हैं, यह आसान है। सबसे पहले, आप उपयोग कर सकते हैं toQueryParams प्रत्येक पैरामीटर के लिए नाम / मान युग्म के साथ एक जावास्क्रिप्ट वस्तु पाने के लिए स्ट्रिंग वस्तु पर विधि।

दूसरे, आप Form.Elements.setValue विधि का उपयोग एक वास्तविक रूप इनपुट राज्य के लिए प्रत्येक क्वेरी स्ट्रिंग मान अनुवाद करने के लिए (प्रलेखित किया जाना प्रतीत नहीं होता है) कर सकते हैं (उदाहरण के लिए एक चेकबॉक्स को चेक जब क्वेरी स्ट्रिंग मूल्य "पर" है)। name.value का प्रयोग = मूल्य तकनीक केवल पाठ का चयन करें (एक, नहीं कई) आदानों के लिए काम करता है। प्रोटोटाइप पद्धति का उपयोग करना चेकबॉक्स लिए समर्थन जोड़ता है और चयन (एकाधिक) आदानों।

पॉप्युलेट करने के लिए आपके पास क्या है एक साधारण समारोह का सवाल है, यह अच्छी तरह से काम करता है और यह जटिल नहीं है।

function populateForm(queryString) {
    var params = queryString.toQueryParams();
    Object.keys(params).each(function(key) {
        Form.Element.setValue($("someform")[key], params[key]);
    });
}

इस का उपयोग करता है Object.keys और प्रत्येक प्रत्येक क्वेरी स्ट्रिंग पैरामीटर से अधिक पुनरावृति और क्वेरी पैरामीटर वस्तु में मिलान मूल्य के लिए मिलान प्रपत्र इनपुट (इनपुट नाम विशेषता का प्रयोग करके) स्थापित करने के लिए तरीके।

संपादित करें: ध्यान दें कि आप अपने प्रपत्र तत्वों पर आईडी गुणों के लिए इस समाधान के लिए काम करने के लिए जरूरत नहीं है।

02/11/2008 को 20:24
का स्रोत उपयोगकर्ता

वोट
0

में कोड की तीन लाइनों prototype.js :

$H(query.toQueryParams()).each(function(pair) {
    $("form")[pair.key].setValue(pair.value);
});
12/11/2008 को 12:29
का स्रोत उपयोगकर्ता

वोट
0

आप का उपयोग कर जावास्क्रिप्ट वस्तु में प्रपत्र डेटा प्राप्त कर सकते हैं formManager

28/09/2010 को 17:19
का स्रोत उपयोगकर्ता

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