উত্তর:
হ্যাঁ, স্ট্যান্ডার্ড আচরণ হ'ল মানটি কেবল তখনই পাঠানো হয় যদি চেকবক্সটি চেক করা হয়। এর অর্থ সাধারণত আপনার সমস্ত সার্ভারে যে চেকবক্সগুলি আশা করছেন তা মনে রাখার একটি উপায় থাকা দরকার কারণ সমস্ত তথ্য ফর্ম থেকে ফিরে আসে না।
ডিফল্ট মান সর্বদা "চালু" থাকে, এটি ব্রাউজারগুলির মধ্যে সামঞ্জস্যপূর্ণ হওয়া উচিত।
এটি ডাব্লু 3 সি এইচটিএমএল 4 এর প্রস্তাবনায় আচ্ছাদিত :
চেকবাক্সগুলি (এবং রেডিও বোতামগুলি) স্যুইচগুলি চালু / বন্ধ রয়েছে যা ব্যবহারকারীরা টগল করতে পারে। যখন নিয়ন্ত্রণ উপাদানটির পরীক্ষিত বৈশিষ্ট্য সেট করা থাকে তখন একটি স্যুইচ "চালু" থাকে। যখন কোনও ফর্ম জমা দেওয়া হয়, কেবলমাত্র "চালু" চেকবক্স নিয়ন্ত্রণগুলি সফল হতে পারে।
<select>
দুটি বিকল্প সঙ্গে on
এবং off
:-)
এইচটিএমএলে, প্রতিটি <input />
উপাদান একটি একক (তবে অনন্য নয়) নাম এবং মান জোড়ার সাথে যুক্ত। এই যুগলটি পরবর্তী অনুরোধে প্রেরণ করা হয় (এই ক্ষেত্রে, একটি পোষ্ট অনুরোধ সংস্থা) কেবলমাত্র <input />
"সফল" হলে।
সুতরাং আপনার <form>
ডিওমে এই ইনপুটগুলি থাকলে :
<input type="text" name="one" value="foo" />
<input type="text" name="two" value="bar" disabled="disabled" />
<input type="text" name="three" value="first" />
<input type="text" name="three" value="second" />
<input type="checkbox" name="four" value="baz" />
<input type="checkbox" name="five" value="baz" checked="checked" />
<input type="checkbox" name="six" value="qux" checked="checked" disabled="disabled" />
<input type="checkbox" name="" value="seven" checked="checked" />
<input type="radio" name="eight" value="corge" />
<input type="radio" name="eight" value="grault" checked="checked" />
<input type="radio" name="eight" value="garply" />
এই নামটি + মান জোড়া তৈরি করবে যা সার্ভারে জমা দেওয়া হবে:
one=foo
three=first
three=second
five=baz
eight=grault
লক্ষ্য করুন:
two
এবং six
তাদের বাদ দেওয়া হয়েছিল কারণ তাদের disabled
বৈশিষ্ট্যটি সেট ছিল।three
দু'বার প্রেরণ করা হয়েছিল কারণ এতে একই নামের দুটি বৈধ ইনপুট রয়েছে।four
প্রেরণ করা হয়নি কারণ এটি checkbox
এটি ছিল নাchecked
six
সত্ত্বেও প্রেরণ করা হয়নি checked
কারণ disabled
গুণটির উচ্চতর বৈশিষ্ট্য রয়েছে।seven
name=""
প্রেরিত কোনও গুণাবলী নেই, সুতরাং এটি জমা দেওয়া হয়নি।আপনার প্রশ্নের সম্মানের সাথে: আপনি দেখতে পাচ্ছেন যে চেক করা নেই এমন একটি চেকবক্সের সার্ভারে তার নাম + মান জুটি থাকবে না - তবে একই নামটি ভাগ করে নেওয়া অন্যান্য ইনপুটগুলি এর সাথে প্রেরণ করা হবে।
এএসপি.নেট এমভিসি এর মতো কাঠামো রেন্ডার এইচটিএমএল-এ checkbox
একটি hidden
ইনপুট দিয়ে প্রতিটি ইনপুটকে জোড়া দিয়ে (আত্মতাত্ত্বিকভাবে) এগুলি ঘিরে কাজ করে :
@Html.CheckBoxFor( m => m.SomeBooleanProperty )
উপস্থাপন করে:
<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden" name="SomeBooleanProperty" value="false" />
যদি ব্যবহারকারী চেকবক্সটি চেক না করে থাকে তবে নিম্নলিখিতটি সার্ভারে প্রেরণ করা হবে:
SomeBooleanProperty=false
যদি ব্যবহারকারী চেকবক্সটি চেক করে, তবে উভয়ই প্রেরণ করা হবে:
SomeBooleanProperty=true
SomeBooleanProperty=false
কিন্তু সার্ভারটি =false
সংস্করণটিকে এড়িয়ে যাবে কারণ এটি সংস্করণটি দেখে =true
এবং তাই এটি যদি এটি না দেখায় তবে এটি =true
নির্ধারণ করতে পারে যে চেকবক্সটি রেন্ডার করা হয়েছিল এবং ব্যবহারকারী এটি পরীক্ষা করে নি - SomeBooleanProperty
ইনপুটগুলিকে একেবারেই রেন্ডার করা হয়নি।
[]
ইনপুট নামের শেষে ব্যবহার করেন, ডিফল্ট আচরণটি কেবলমাত্র সেই নামের সাথে শেষ উপাদানটি জমা দিতে হয়, সুতরাং যতক্ষণ না লুকানো ইনপুট চেকবক্সের আগে থাকে, এটি কাজ করবে।
[]
প্রত্যয়টি এইচটিএমএল স্পেসিফিকেশনের অংশ নয় এবং ব্রাউজারগুলি এটিকে বিশেষভাবে আচরণ করে না। []
পিএইচপি ছাড়াই সমস্ত মানগুলির পরিবর্তে কেবলমাত্র একক মান (শেষ মান) অ্যাক্সেসের অনুমতি দেবে।
যদি চেকবক্সটি চেক করা না থাকে তবে এটি ফর্ম জমা দেওয়ার সময় পাঠানো ডেটাতে অবদান রাখে না।
এইচটিএমএল 5 বিভাগ 4.10.22.4 ফর্ম ডেটা সেট তৈরি করা ফর্ম ডেটা তৈরির উপায় বর্ণনা করে:
নিম্নলিখিত শর্তগুলির মধ্যে যদি কোনটি পূরণ করা হয় তবে এই উপাদানটির জন্য এই সাবস্কিপগুলি এড়িয়ে যান: [...]
ক্ষেত্র উপাদানটি একটি ইনপুট উপাদান যাঁর ধরণের বিশিষ্টতা চেকবাক্স রাজ্যে এবং যার চেকডনেসটি মিথ্যা।
এবং তারপরে অনুপস্থিত on
থাকলে ডিফল্ট মান নির্দিষ্ট করা value
হয়:
অন্যথায়, যদি ক্ষেত্র উপাদানটি কোনও ইনপুট উপাদান হয় যার ধরণের বৈশিষ্ট্যটি চেকবক্সের রাজ্যে বা রেডিও বোতামের রাজ্যে থাকে, তবে এই আরও নেস্টেড সাবসটপগুলি চালান:
যদি ক্ষেত্রের উপাদানটির একটি মান বৈশিষ্ট্য নির্দিষ্ট করা থাকে, তবে মানটিকে সেই গুণকের মান হতে দিন; অন্যথায়, মানটি "চালু" হয়ে যান।
ফর্ম ডেটা নির্মাণের সময় এই চেকবিহীন চেকবক্সগুলি বাদ দেওয়া হয়।
এইচটিএমএল 4 এর অধীনে অনুরূপ আচরণ প্রয়োজন । সমস্ত অনুগত ব্রাউজার থেকে এই আচরণটি আশা করা যুক্তিসঙ্গত।
চেকবক্সগুলি চেকবক্সটি যদি চেক করা হয় তবেই এবং 'মান' পোস্ট করে। চেকবাক্স মান ধরার জন্য অন্তর্ভুক্ত আপনি লুকানো ইনপুট ব্যবহার করতে পারেন
জেএস :
var chk = $('input[type="checkbox"]');
chk.each(function(){
var v = $(this).attr('checked') == 'checked'?1:0;
$(this).after('<input type="hidden" name="'+$(this).attr('rel')+'" value="'+v+'" />');
});
chk.change(function(){
var v = $(this).is(':checked')?1:0;
$(this).next('input[type="hidden"]').val(v);
});
এইচটিএমএল :
<label>Active</label><input rel="active" type="checkbox" />
ফর্ম জমা দেওয়ার পরে যদি চেকবাক্স ইনপুট মান ডেটা পাঠানো হয় তবে এটি কি ব্রাউজারগুলির জন্য স্ট্যান্ডার্ড আচরণ?
হ্যাঁ, কারণ অন্যথায় চেকবক্সটি চেক করা হয়েছে কিনা তা নির্ধারণের কোনও শক্ত উপায়ই ছিল না (যদি এটির মান পরিবর্তন হয়, যদি আপনার পছন্দসই মানটি পরীক্ষা করা হয় তবে এটি একইরকম হতে পারে অদলবদল)।
এবং যদি কোনও মান ডেটা সরবরাহ না করা হয়, তবে কি ডিফল্ট মানটি সর্বদা "চালু" থাকে?
অন্যান্য উত্তরগুলি নিশ্চিত করে যে "অন" ডিফল্ট। তবে, আপনি যদি মানটির প্রতি আগ্রহী না হন তবে কেবল ব্যবহার করুন:
if (isset($_POST['the_checkbox'])){
// name="the_checkbox" is checked
}
এইচটিএমএল 4 স্পেস থেকে, যা প্রায় সমস্ত ব্রাউজার জুড়েই সামঞ্জস্যপূর্ণ হওয়া উচিত:
http://www.w3.org/TR/html401/interact/forms.html#checkbox
চেকবাক্সগুলি (এবং রেডিও বোতামগুলি) স্যুইচগুলি চালু / বন্ধ রয়েছে যা ব্যবহারকারীরা টগল করতে পারে। যখন নিয়ন্ত্রণ উপাদানটির পরীক্ষিত বৈশিষ্ট্য সেট করা থাকে তখন একটি স্যুইচ "চালু" থাকে। যখন কোনও ফর্ম জমা দেওয়া হয়, কেবলমাত্র "চালু" চেকবক্স নিয়ন্ত্রণগুলি সফল হতে পারে।
সফল নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়:
একটি সফল নিয়ন্ত্রণ জমা দেওয়ার জন্য "বৈধ"। প্রতিটি সফল নিয়ন্ত্রণের জমা দেওয়া ফর্ম ডেটা সেটের অংশ হিসাবে তার নিয়ন্ত্রণের নামটি বর্তমান মান দিয়ে যুক্ত করে। একটি সফল নিয়ন্ত্রণ অবশ্যই একটি ফর্ম উপাদান মধ্যে সংজ্ঞায়িত করা উচিত এবং একটি নিয়ন্ত্রণ নাম থাকতে হবে।
ইনপুট প্রকার = "লুকানো" নাম = "is_main" মান = "0"
ইনপুট প্রকার = "চেকবক্স" নাম = "is_main" মান = "1"
যাতে আপনি অ্যাপ্লিকেশনটিতে যেমন করেছিলেন তেমন আপনি নিয়ন্ত্রণ করতে পারেন। যদি এটি পরীক্ষা করে থাকে তবে মান 1 অন্যথায় 0 প্রেরণ করুন
উপরের কোন উত্তরই আমাকে সন্তুষ্ট করেনি। আমি খুঁজে পেয়েছি সবচেয়ে ভাল সমাধান হ'ল প্রতিটি নামের সাথে একই চেকবক্স ইনপুটটির আগে একটি লুকানো ইনপুট অন্তর্ভুক্ত করা ।
<input type="hidden" name="foo[]" value="off"/>
<input type="checkbox" name="foo[]"/>
তারপরে সার্ভারের দিকে, একটু অ্যালগোরিদম ব্যবহার করে আপনি এইচটিএমএল সরবরাহ করার মতো আরও কিছু পেতে পারেন।
function checkboxHack(array $checkbox_input): array
{
$foo = [];
foreach($checkbox_input as $value) {
if($value === 'on') {
array_pop($foo);
}
$foo[] = $value;
}
return $foo;
}
এটি কাঁচা ইনপুট হবে
array (
0 => 'off',
1 => 'on',
2 => 'off',
3 => 'off',
4 => 'on',
5 => 'off',
6 => 'on',
),
এবং ফাংশন ফিরে আসবে
array (
0 => 'on',
1 => 'off',
2 => 'on',
3 => 'on',
)
আমার একটি পৃষ্ঠা (ফর্ম) যা গতিশীলভাবে চেকবাক্স তৈরি করে তাই এই উত্তরগুলি দারুণ সহায়ক হয়েছে। আমার সমাধান এখানে অনেকের সাথে একই রকম তবে এটি কার্যকর করা সহজ বলে আমি ভাবতে সহায়তা করতে পারি না।
প্রথমে আমি আমার চেকবক্সের সাথে মিল রেখে একটি লুকানো ইনপুট বাক্স রাখি
<td><input class = "chkhide" type="hidden" name="delete_milestone[]" value="off"/><input type="checkbox" name="delete_milestone[]" class="chk_milestone" ></td>
এখন যদি checkboxes
সমস্তগুলি নির্বাচিত না হয় তবে লুকানো ক্ষেত্রের দ্বারা ফেরত মানগুলি সমস্ত বন্ধ হয়ে যাবে।
উদাহরণস্বরূপ, এখানে পাঁচটি গতিশীল inোকানো চেকবাক্স সহ POSTS
নিম্নলিখিত মানগুলি রূপ দেয়:
'delete_milestone' =>
array (size=7)
0 => string 'off' (length=3)
1 => string 'off' (length=3)
2 => string 'off' (length=3)
3 => string 'on' (length=2)
4 => string 'off' (length=3)
5 => string 'on' (length=2)
6 => string 'off' (length=3)
এটি দেখায় যে কেবল তৃতীয় এবং চতুর্থ চেকবক্সগুলি হয় on
বা checked
।
সংক্ষেপে ডামি বা লুকানো ইনপুট ক্ষেত্রটি কেবল ইঙ্গিত করে যে অফ ইনডেক্সের নীচে "অন" না থাকলে সবকিছু বন্ধ রয়েছে , যা ক্লায়েন্ট সাইড কোডের একক লাইন ছাড়াই আপনার প্রয়োজনীয় সূচকটি দেয়।
।
প্রকৃত চেকবক্সের (একই নামের) আগে একই নামের গোপন ইনপুটটি বাদ দেওয়া ঠিক যেমন এএসপি.নেট বৈকল্পিকের মতো। শুধুমাত্র শেষ মানগুলি প্রেরণ করা হবে। এইভাবে যদি কোনও বাক্স চেক করা থাকে তবে এর নাম এবং "অন" মান পাঠানো হয়, যদি এটি চেক না করা হয় তবে সংশ্লিষ্ট লুকানো ইনপুটটির নাম এবং আপনি যে মানটি দিতে চান তা প্রেরণ করা হবে। শেষ পর্যন্ত আপনি পড়ার জন্য $ _POST অ্যারে পাবেন এতে থাকা সমস্ত চেকড এবং চেক না করা উপাদানগুলির সাথে, "অন" এবং "ভুয়া" মানগুলি, কোনও সদৃশ কী নেই। পিএইচপি মধ্যে প্রক্রিয়া সহজ।
ফর্ম জমা দেওয়ার সময় পাঠানো হবে না এমন চেকবাক্সগুলি যাচাই করা একই সমস্যা রয়েছে, আমি চেকবাক্স আইটেমগুলি আয়না না করে অন্য একটি সমাধান নিয়ে এসেছি।
এর সাথে সমস্ত চেক না করা চেকবক্সগুলি পাওয়া
var checkboxQueryString;
$form.find ("input[type=\"checkbox\"]:not( \":checked\")" ).each(function( i, e ) {
checkboxQueryString += "&" + $( e ).attr( "name" ) + "=N"
});
আমি এই কোডটি দিয়ে সমস্যার সমাধান করেছি:
এইচটিএমএল ফর্ম
<input type="checkbox" id="is-business" name="is-business" value="off" onclick="changeValueCheckbox(this)" >
<label for="is-business">Soy empresa</label>
এবং জাভাস্ক্রিপ্ট ফাংশন চেকবক্স মান ফর্ম পরিবর্তন করে:
//change value of checkbox element
function changeValueCheckbox(element){
if(element.checked){
element.value='on';
}else{
element.value='off';
}
}
এবং সার্ভার চেক করেছে যে ডেটা পোস্টটি "চালু" বা "অফ" আছে কিনা। আমি প্লেফ্রেমওয়ার্ক জাভা ব্যবহার করেছি
final Map<String, String[]> data = request().body().asFormUrlEncoded();
if (data.get("is-business")[0].equals('on')) {
login.setType(new MasterValue(Login.BUSINESS_TYPE));
} else {
login.setType(new MasterValue(Login.USER_TYPE));
}