কীভাবে আমি se .সরিয়ালাইজ ()গুলিকে এই অক্ষমগুলি বিবেচনা করি: ইনপুট উপাদানগুলি?


135

এটি ডিফল্টরূপে অক্ষম ইনপুট উপাদানগুলি এড়ানো হবে বলে মনে হচ্ছে $.serialize()। এখানে কি কাজ আছে?


এটি এমনকি অযৌক্তিক, কারণ আপনি কোনও প্রতিবন্ধী textareaকিন্তু অক্ষম নয় সিরিয়ালিয়াল করতে পারেন input..
ডাভি

উত্তর:


233

অস্থায়ীভাবে তাদের সক্ষম করুন।

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');

26
নীচে অ্যান্ড্রু দ্বারা উল্লিখিত readonlyপরিবর্তে বিবেচনা মূল্য disabled
andilabs

93

অক্ষম ইনপুটগুলির পরিবর্তে পঠনযোগ্য ইনপুটগুলি ব্যবহার করুন:

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

এটি সিরিয়ালাইজ () দ্বারা বাছাই করা উচিত।


দুর্দান্ত, কেবল একটি নোট: কেবলমাত্র পঠনযোগ্য অবস্থায় সাবমিট বাটনটি ক্লিকযোগ্য।
আন্দ্রে চেলেলা

3
অক্ষম সিরিয়ালাইজেশন প্রতিরোধ করে, তবে কেবলমাত্র বৈধতা রোধ করে
জেফ লোরি

11

আপনি একটি প্রক্সি ফাংশন (এটা উভয় প্রভাবিত ব্যবহার করতে পারেন $.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);

সেরা সমাধান, নির্বাচনের জন্য কাজ করে, চেকবক্স, রেডিও, লুকানো এবং অক্ষম ইনপুট
প্লাসেবো

9

@ ব্যবহারকারী 113716 মূল উত্তরটি সরবরাহ করেছেন। এখানে আমার অবদানটি একটি ফাংশন যুক্ত করে কেবল একটি 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();

4

এটা চেষ্টা কর:

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

আপনি কি দয়া করে আরও কিছুটা ব্যাখ্যা করতে পারেন এবং ওপিকে ব্যাখ্যা করতে পারেন কেন এটি কাজ করে?
উইলেম মুল্ডার

আমি আপনার জন্য এটি ব্যাখ্যা করতে পারেন। যদি আপনি এখনও একটি অক্ষম ইনপুট ক্ষেত্র (যে কারণেই হোক না কেন) রাখতে চান তবে আপনি সিরিয়ালাইজ () পদ্ধতিতে ইনপুট নামটিও প্রেরণ করতে চান। তার পরিবর্তে আপনি একটি লুকানো ইনপুট ক্ষেত্র (আপনার অক্ষম ইনপুট ক্ষেত্রের সমান মান সহ) ব্যবহার করতে পারেন, যা সিরিয়ালাইজ () উপেক্ষা করে না। এবং তারপরে আপনি দৃশ্যমানতার জন্য আপনার অক্ষম ইনপুট ক্ষেত্রটিও রাখতে পারেন।
সুপারকিটোজ

3

আমি কয়েকটি কাজের ক্ষেত্র দেখতে পাচ্ছি, কিন্তু এখনও কেউ নিজের সিরিয়ালাইজিং ফাংশনটি লেখার পরামর্শ দিচ্ছে না? আপনি এখানে যান: 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);
    }
});

2

অক্ষম ইনপুট উপাদানগুলি ক্রমিকায়িত হয় না কারণ 'অক্ষম' মানে তারা ডাব্লু 3 সি স্ট্যান্ডার্ড অনুযায়ী ব্যবহার করা উচিত নয়। কিছু ব্রাউজারগুলি না করলেও jQuery কেবলমাত্র মান মেনে চলে। অক্ষম ক্ষেত্রের অনুরূপ একটি মান সহ একটি লুকানো ক্ষেত্র যুক্ত করে, বা jQuery এর মাধ্যমে এই জাতীয় কিছু করে আপনি এই চারপাশে কাজ করতে পারেন:

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

স্পষ্টতই, যদি আপনার একাধিক অক্ষম ইনপুট থাকে তবে আপনাকে ম্যাচিং নির্বাচক ইত্যাদির মাধ্যমে পুনরাবৃত্তি করতে হবে d


1

যদি কেউ এগুলিকে সক্রিয় করতে না চান, তবে আবার তাদের অক্ষম করুন, আপনি এটি করার চেষ্টাও করতে পারেন ( সিরিয়ালাইজ অ্যারে দ্বারা গৃহীত নয় এমন অক্ষম ক্ষেত্রগুলি থেকে আমি এটি সংশোধন করেছি , একটি প্লাগইন ব্যবহার করে কোনও সাধারণ ফাংশন ব্যবহার করে):

function getcomment(item)
{
  var data = $(item).serializeArray();
  $(':disabled[name]',item).each(function(){
    data.push({name: item.name,value: $(item).val()});
  });
  return data;
}

সুতরাং আপনি তাদের এভাবে কল করতে পারেন:

getcomment("#formsp .disabledfield");

1
আমি আপনার ফাংশনটি চেষ্টা করেছি এবং এটি উপাদানগুলির নাম বা মান উত্পাদন করে না। নীচে উদাহরণ দেখুন; code 3: {নাম: অপরিবর্তিত, মান: ""} 4: {নাম: অপরিজ্ঞাত, মান: ""}
ব্ল্যাকমম্বো

0

হারুন হুডনের ঠিক উপরে:

হতে পারে আপনি ইনপুট (যেমন নির্বাচন করুন) এর চেয়ে অন্য কিছু পেয়েছেন, তাই আমি পরিবর্তন করেছি

this.find(":input:disabled")

প্রতি

this.find(":disabled")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.