2011-01-20 7 views
104

डिफ़ॉल्ट अक्षम इनपुट तत्वों द्वारा लगता है $.serialize(),

पर कोई काम है?

+0

यह भी वीडर है, क्योंकि आप एक अक्षम 'textarea' को क्रमबद्ध कर सकते हैं लेकिन एक अक्षम 'इनपुट' नहीं .. – daVe

उत्तर

178

अस्थायी रूप से उन्हें सक्षम करें।

var myform = $('#myform'); 

// Find disabled inputs, and remove the "disabled" attribute 
var disabled = myform.find(':input:disabled').removeAttr('disabled'); 

// serialize the form 
var serialized = myform.serialize(); 

// re-disabled the set of inputs that you previously enabled 
disabled.attr('disabled','disabled'); 
+19

नीचे दिए गए एंड्रयू द्वारा उल्लिखित' अक्षम 'के बजाय' readonly' पर विचार करने लायक है। – andi

+9

@andi readonly – Marc

0

अक्षम इनपुट तत्वों को क्रमबद्ध नहीं किया जाता है क्योंकि 'अक्षम' का अर्थ है कि उन्हें W3C मानक प्रति उपयोग नहीं किया जाना चाहिए। jQuery बस मानक द्वारा पालन कर रहा है, भले ही कुछ ब्राउज़र नहीं करते हैं। , जाहिर है

$('#myform').submit(function() { 
    $(this).children('input[hiddeninputname]').val($(this).children('input:disabled').val()); 
    $.post($(this).attr('url'), $(this).serialize, null, 'html'); 
}); 

, यदि आप एक से अधिक विकलांग अपना सहयोग दे आप: आप इस के आसपास काम कर सकते हैं, विकलांग क्षेत्र के लिए एक मूल्य के समान के साथ एक छिपी हुई फ़ील्ड जोड़कर, या कुछ इस तरह jQuery के माध्यम से यह कर, द्वारा मिलान करने वाले चयनकर्ताओं आदि पर पुनरावृत्ति करना होगा।

78

अक्षम इनपुट के बजाय केवल पढ़ने के इनपुट का उपयोग करने के बारे में क्या?()

<input name='hello_world' type='text' value='hello world' readonly /> 

इस serialize द्वारा उठाया जाना चाहिए।

+9

चुनने के लिए काम नहीं करता है चेकबॉक्स के लिए काम नहीं करता – Highstrike

+8

कॉम्बो बॉक्स के लिए भी काम नहीं करता है। – wmac

+0

ग्रेट, बस एक नोट: केवल सबमिट होने पर सबमिट बटन अभी भी क्लिक करने योग्य है। –

5

आप प्रॉक्सी समारोह का उपयोग कर सकते (को प्रभावित दोनों $.serializeArray() और $.serialize()):

(function($){ 
    var proxy = $.fn.serializeArray; 
    $.fn.serializeArray = function(){ 
     var inputs = this.find(':disabled'); 
     inputs.prop('disabled', false); 
     var serialized = proxy.apply(this, arguments); 
     inputs.prop('disabled', true); 
     return serialized; 
    }; 
})(jQuery); 
0

इस

<input type="checkbox" name="_key" value="value" disabled="" /> 
<input type="hidden" name="key" value="value"/> 
+0

क्या आप थोड़ा और विस्तार कर सकते हैं और ओपी को समझा सकते हैं कि यह क्यों काम करता है? –

+0

मैं इसे आपके लिए समझा सकता हूं। यदि आप अभी भी एक अक्षम इनपुट फ़ील्ड (किसी भी कारण से) चाहते हैं, लेकिन आप serialize() विधि के साथ इनपुट नाम भी भेजना चाहते हैं। फिर इसके बजाय आप एक छिपे हुए इनपुट फ़ील्ड (आपके अक्षम इनपुट फ़ील्ड के समान मूल्य के साथ) का उपयोग कर सकते हैं, जो serialize() अनदेखा नहीं करता है। और फिर आप दृश्यता के लिए अपने अक्षम इनपुट फ़ील्ड को भी रख सकते हैं। – superkytoz

0

मैं कुछ समाधान देख सकते हैं की कोशिश, लेकिन अभी भी कोई अपने खुद के serializing लेखन सुझाव समारोह? ये रहा: https://jsfiddle.net/Lnag9kbc/

var data = []; 

// here, we will find all inputs (including textareas, selects etc) 
// to find just disabled, add ":disabled" to find() 
$("#myform").find(':input').each(function(){ 
    var name = $(this).attr('name'); 
    var val = $(this).val(); 
    //is name defined? 
    if(typeof name !== typeof undefined && name !== false && typeof val !== typeof undefined) 
    { 
     //checkboxes needs to be checked: 
     if(!$(this).is("input[type=checkbox]") || $(this).prop('checked')) 
      data += (data==""?"":"&")+encodeURIComponent(name)+"="+encodeURIComponent(val); 
    } 
}); 
1

@ user113716 कोर उत्तर प्रदान किया, मेरे योगदान यहाँ यह करने के लिए एक समारोह जोड़कर सिर्फ एक jQuery तुनुकमिज़ाजी है।

/** 
* Alternative method to serialize a form with disabled inputs 
*/ 
$.fn.serializeIncludeDisabled = function() { 
    let disabled = this.find(":input:disabled").removeAttr("disabled"); 
    let serialized = this.serialize(); 
    disabled.attr("disabled", "disabled"); 
    return serialized; 
}; 

उदाहरण उपयोग:

$("form").serializeIncludeDisabled(); 
0

readonly बजाय disabled उपयोग करने के लिए विचार करें। केवल फ़ील्ड को क्रमबद्ध करें पढ़ें।

संबंधित मुद्दे