শুধুমাত্র গুগল ক্রোমে "অবৈধ ফর্ম নিয়ন্ত্রণ"


106

নীচের কোডটি সাফারিতে ভাল কাজ করে তবে ক্রোম এবং ফায়ারফক্সে ফর্মটি জমা দেবে না। ক্রোম কনসোল ত্রুটি লগ করে An invalid form control with name='' is not focusable। কোন ধারনা?

মনে রাখবেন যে নীচের নিয়ন্ত্রণগুলির নাম না থাকলেও জমা দেওয়ার সময় তাদের নাম থাকতে হবে, নীচে জাভাস্ক্রিপ্ট দ্বারা জনবহুল। ফর্মটি সাফারিতে কাজ করে।

<form method="POST" action="/add/bundle"> 
<p> 
    <input type="text" name="singular" placeholder="Singular Name" required> 
    <input type="text" name="plural" placeholder="Plural Name" required> 
</p> 
<h4>Asset Fields</h4> 
<div class="template-view" id="template_row" style="display:none"> 
    <input type="text" data-keyname="name" placeholder="Field Name" required> 
    <input type="text" data-keyname="hint" placeholder="Hint"> 
    <select data-keyname="fieldtype" required> 
        <option value="">Field Type...</option> 
        <option value="Email">Email</option> 
        <option value="Password">Password</option> 
        <option value="Text">Text</option> 
    </select>    
    <input type="checkbox" data-keyname="required" value="true"> Required
    <input type="checkbox" data-keyname="search" value="true"> Searchable
    <input type="checkbox" data-keyname="readonly" value="true"> ReadOnly
    <input type="checkbox" data-keyname="autocomplete" value="true"> AutoComplete
    <input type="radio" data-keyname="label" value="label" name="label"> Label
    <input type="radio" data-keyname="unique" value="unique" name="unique"> Unique
    <button class="add" type="button">+</button> 
    <button class="remove" type="button">-</button> 
</div> 

<div id="target_list"></div> 
    <p><input type="submit" name="form.submitted" value="Submit" autofocus></p> 
</form>

<script> 
function addDiv()
{
    var pCount = $('.template-view', '#target_list').length;
    var pClone = $('#template_row').clone();
    $('select, input, textarea', pClone).each(function(idx, el){
        $el = $(this);
        if ((el).type == 'radio'){
            $el.attr('value', pCount + '_' + $el.data('keyname'));
        }
        else {
            $el.attr('name', pCount + '_' + $el.data('keyname'));
        };
    });
    $('#target_list').append(pClone);
    pClone.show();
}

function removeDiv(elem){
    var pCount = $('.template-view', '#target_list').length;
    if (pCount != 1)
    {
        $(elem).closest('.template-view').remove();
    }
};

$('.add').live('click', function(){
    addDiv();
});

$('.remove').live('click', function(){
    removeDiv(this);
});

$(document).ready(addDiv);

</script>

শুধুমাত্র সফল নিয়ন্ত্রণগুলি প্রেরণ করা হবে। সফল হতে হলে, একটি নিয়ন্ত্রণ আবশ্যক একটি নাম আছে। অন্যান্য প্রয়োজনীয়তাও রয়েছে (লিঙ্কটি দেখুন)।
রবজি

রেডিও বোতামগুলির নাম রয়েছে। বাকি সব কিছুই জাভাস্ক্রিপ্টের মাধ্যমে একটি নাম পায়।
এমএফবি

উত্তর:


247

ক্রোম এমন কোনও নিয়ন্ত্রণে ফোকাস করতে চায় যা প্রয়োজনীয় তবে তবুও খালি যাতে এটি 'দয়া করে এই ক্ষেত্রটি পূরণ করুন' বার্তাটি পপআপ করতে পারে। যাইহোক, যদি ফর্ম জমা দেওয়ার সময় ক্রোম বার্তাটি পপআপ করতে চায় এমন বিন্দুটিতে লুকানো থাকে তবে ক্রোমটি লুকানো থাকার কারণে নিয়ন্ত্রণটি নিয়ন্ত্রণ করতে পারে না, সুতরাং ফর্মটি জমা দেবে না।

সুতরাং, সমস্যাটি পেতে, যখন জাভাস্ক্রিপ্ট দ্বারা কোনও নিয়ন্ত্রণ লুকানো থাকে, তখন আমাদের অবশ্যই সেই নিয়ন্ত্রণ থেকে 'প্রয়োজনীয়' বৈশিষ্ট্যটি সরিয়ে ফেলতে হবে।


9
আহ, যে স্তন্যপান। যদিও আমি অনুমান করি ততক্ষণে ব্রাউজারটি অনুমান করতে পারে না যে ক্ষেত্রটি গোপন থাকলে (সম্ভবত কোনও ট্যাবড ফর্ম ...) যদি আপনার ইন্টারফেসটি বৈধতা ত্রুটি বার্তাগুলি কীভাবে মোকাবেলা করতে চায় তা সম্ভবত এটি অনুমান করতে পারে না।
ওয়েসলি মার্চ

12
ধন্যবাদ, এটি কাজ করে। ক্রোম যদিও এটি করে এটি লজ্জাজনক, এটি কেবল ক্ষেত্রটি এড়িয়ে যাওয়া উচিত।
472084

টেক্সারিয়ায় পাঠ্যের দৈর্ঘ্য ৪১০০ অক্ষরের বেশি ছিল না, কোনও লুকানো প্রয়োজনীয় ক্ষেত্র ছিল না, যখন টেক্সটরিয়ায় Chrome এ আমার সমস্যা ছিল had যখন পাঠ্য দৈর্ঘ্য <4000 সবকিছু কাজ করে, অন্যথায় কনসোলে আমি সেই বার্তাটি দেখতে পারি এবং ফর্মটি জমা দিতে পারি না
ikos23

ক্ষেত্রটি যখন লুকানো থাকে তখন এটির প্রয়োজন হয় না, এটির পরিবর্তে এটি অক্ষম করার জন্য আরও কী বোঝায় না? ( স্ট্যাকওভারফ্লো.com / a / 22753533 / 421243 )
ডেভিড কুক

3
এই ত্রুটিটি যদি ক্রোমে এখনও দেখা যায় তবে ক্ষেত্রটি খালি নয়? কীভাবে এটি সমাধান করবেন আপনার কোনও ধারণা আছে?
লেয়া

12

আপনার যদি এই জাতীয় কোড থাকে তবে এটি বার্তাটি প্রদর্শন করবে:

<form>
  <div style="display: none;">
    <input name="test" type="text" required/>
  </div>

  <input type="submit"/>
</form>

এই সাইটের সমাধান কীভাবে সাইটের কাজ করা উচিত তার উপর নির্ভর করবে

উদাহরণস্বরূপ আপনি যদি এই ক্ষেত্রের প্রয়োজন না হয় তবে যদি আপনি ফর্মটি জমা করতে চান না তবে আপনার জমা দেওয়া বোতামটি অক্ষম করা উচিত

সুতরাং ডিভিটি দেখানোর জন্য জেএস কোডটি সাবমিট বোতামটি সক্ষম করতে হবে

আপনি বোতামটিও আড়াল করতে পারেন (অক্ষম করা উচিত এবং লুকানো উচিত কারণ এটি যদি লুকানো থাকে তবে অক্ষম না করা হয় তবে ব্যবহারকারী enterঅন্য যে কোনও ক্ষেত্রে প্রেসের মতো অন্যদের কাছে ফর্মটি জমা দিতে পারে তবে বোতামটি অক্ষম থাকলে এটি ঘটবে না

আপনি যদি ডিভটি লুকিয়ে থাকে তবে ফর্মটি জমা দিতে চান তবে আপনি তার ভিতরে কোনও প্রয়োজনীয় ইনপুট অক্ষম করতে পারবেন এবং ডিভটি দেখানোর সময় ইনপুটগুলি সক্ষম করতে হবে

যদি কারও কোডগুলির প্রয়োজন হয় তবে আপনার যা প্রয়োজন তা ঠিক আমাকে বলুন


হ্যাঁ .. আপনি কি এর জন্য সমাধান বলতে পারেন?
রেক্স রেক্স

@ রেক্সআরেক্স আমি উত্তরটি সম্পাদনা করি দেখুন এটি আপনাকে সহায়তা করে কিনা বা আমাকে আপনার ঠিক কী প্রয়োজন তা বলুন
রবার্ট

@ কাজী মাসুম বিল্লাহ আমি বুঝতে পারছি না যে আপনি উত্তরে উদাহরণ লিখতে পারেন দয়া করে
রবার্ট

9

যদি আপনি এইচটিএমএল 5 বৈধতা সম্পর্কে চিন্তা না করেন (সম্ভবত আপনি জেএস বা সার্ভারে যাচাই করছেন), আপনি ফর্ম বা ইনপুট উপাদানগুলিতে "অলিওডিকেট" যুক্ত করার চেষ্টা করতে পারেন।


1
লোকেদের এমন কাজ কখনই করা উচিত নয় যে তার জেএস কোডটি এইচটিএমএল 5 দিয়ে কাজ করা উচিত কেবল এইচটিএমএল 5 বন্ধ করে দেওয়া উচিত নয় কারণ সে এটি মোকাবেলা করতে পারে না
রবার্ট

আমি রাজি নই। জিনিসগুলি আলাদাভাবে করার জন্য আপনার কেবল একটি ভাল কারণ প্রয়োজন। এখনও শক্তিশালী বৈধতা লাইব্রেরি আছে। এইচটিএমএল 5 বৈধতা সেট আপ করা সহজ, দ্রুত। এবং সর্বোপরি মানগুলি অনুসরণ করা ভাল। তবে এর অর্থ এই নয় যে এটি "সেরা" সমাধান। কখনও না বল না. এটি সর্বদা নির্ভর করে। যদিও আমি সম্মত হই যে আপনার ক্লায়েন্টের বৈধতা সম্পূর্ণরূপে "কখনই" এড়ানো উচিত নয়। ;-)

5

এইচটিএমএল 5 টি নিয়ন্ত্রণের জন্য যথাযথ ট্যাগগুলি ব্যবহার করার চেষ্টা করুন সংখ্যার মতো (পূর্ণসংখ্যা)

<input type='number' min='0' pattern ='[0-9]*' step='1'/>

দশমিক বা ভাসমান জন্য

 <input type='number' min='0' step='Any'/>

পদক্ষেপ = 'কোনও' এটি ছাড়া আপনি উপরের ক্ষেত্রে 3.5 বা 4.6 এর মতো কোনও দশমিক বা ভাসমান মান প্রবেশ করে আপনার ফর্ম জমা দিতে পারবেন না।

প্যাটার্নটি ঠিক করার চেষ্টা করুন, এই সমস্যাটি সমাধান করতে HTML5 নিয়ন্ত্রণের জন্য টাইপ করুন।


আপনি আমার সমস্যা সমাধান করেছেন। কিন্তু বেতন মনোযোগ যে patternমনে হচ্ছে না যে সর্বজনীন গ্রহণযোগ্য হতে type="number"ক্ষেত্র
জোয়াও মধ্যে Pimentel ফেরেইরা

3

আমি এই ত্রুটিটি পাচ্ছিলাম, এবং নির্ধারণ করেছি যে এটি আসলে এমন কোনও ক্ষেত্রে ছিল যা গোপন ছিল না।

এই ক্ষেত্রে, এটি একটি type="number"ক্ষেত্র ছিল, এটি প্রয়োজন। এই ক্ষেত্রটিতে কখনই কোনও মান প্রবেশ করা হয়নি, ত্রুটি বার্তাটি কনসোলে প্রদর্শিত হবে এবং ফর্মটি জমা দেওয়া হয়নি। একটি মান প্রবেশ করানো, এবং তারপরে এটি অপসারণের অর্থ হ'ল বৈধতা ত্রুটিটি প্রত্যাশিত হিসাবে প্রদর্শিত হবে।

আমি বিশ্বাস করি এটি ক্রোমের একটি ত্রুটি: আপাতত আমার কর্মক্ষেত্রটি প্রাথমিক / ডিফল্ট মান নিয়ে আসবে।


ক্রোমে সম্ভাব্য বাগ। আমার সাথেও ঘটেছিল। +1
gamliela

1

আমার ত্রুটি ছিল:

নাম = 'টেলিফোনো' সহ একটি অবৈধ ফর্ম নিয়ন্ত্রণ মনোনিবেশযোগ্য নয়।

এটি ঘটছিল কারণ আমি প্রয়োজনীয় ক্ষেত্রটি সঠিকভাবে ব্যবহার করছিলাম না, যা চেকবকে ক্লিক করার সময় সক্ষম এবং অক্ষম করে দেওয়া হয়েছিল। সমাধানটি ছিল requiredযখনই চেকবুকটি চিহ্নিত না করা হয়েছিল ততক্ষণ বৈশিষ্ট্যটি সরিয়ে ফেলা এবং যখন চেকবক্সটি চিহ্নিত করা হয়েছিল তখন প্রয়োজনীয় হিসাবে চিহ্নিত করুন।

var telefono = document.getElementById("telefono");  
telefono.removeAttribute("required");

1

বাগ ঠিক করতে আমাকে এরকম কিছু করতে হবে, যেহেতু আমার type="number"সাথে কিছু রয়েছে min="0.00000001":

এইচটিএমএল:

<input type="number" min="0.00000001" step="0.00000001" name="price" value="[%price%]" />

জাতীয়:

$('input[type="submit"]').click(function(e) {
    //prevent chrome bug
    $("input:hidden").val(null);
});

যদি আমি সমস্ত লুকানো ইনপুট ক্ষেত্র nullক্রোমে সেট না করে তবে ইনপুটটি বৈধ করার চেষ্টা করবে।


1

কোন বৈধতা কাজ করবে না।

<form action="whatever" method="post" novalidate>

0

আমার ইনপুট ক্ষেত্রগুলিতে ক্লাস = "লুকানো" থাকাকালীন আমার এই সমস্যাটি ছিল কারণ আমি রেডিও বুলেটগুলির পরিবর্তে বোতামগুলি ব্যবহার করছিলাম - এবং জেএসের মাধ্যমে "সক্রিয়" অবস্থার পরিবর্তন করছিলাম ..

আমি একই গ্রুপের একটি অতিরিক্ত রেডিও ইনপুট ফিল্ড অংশ যুক্ত করেছি যেখানে আমি এই চিত্রটি উপস্থিত হতে চেয়েছি:

<input type="radio" id="thenorm" name="ppoption" value=""  required style="opacity:0"/>

অন্যান্য 2 টি সক্রিয় বুলেট অদৃশ্য, এটি একটি নয় এবং এটি বৈধতা বার্তা এবং কোনও কনসোল ত্রুটিগুলি ট্রিগার করে - কিছুটা হ্যাক তবে এই দিনগুলিতে কী নেই ..


0

দশমিক ফর্ম্যাট যুক্ত করলে এই ত্রুটি পাওয়া যায়। আমি শুধু যোগ

step="0.1"

0

আমি এই ত্রুটি বার্তাটি পেয়েছি যখন আমি কোনও ফর্মের জন্য নির্ধারিত সীমার বাইরে ছিল এমন একটি নম্বর (999999) প্রবেশ করলাম।

<input type="number" ng-model="clipInMovieModel" id="clipInMovie" min="1" max="10000">

-2
$("...").attr("required"); and $("...").removeAttr("required"); 

যতক্ষণ না আমি আমার সমস্ত jQuery কোড এর মধ্যে রেখেছি আমার জন্য কাজ করে না:

$(document).ready(function() {
    //jQuery code goes here
});

-5

requiredপ্রয়োজনীয় = "প্রয়োজনীয়" দ্বারা প্রতিস্থাপন


2
প্রয়োজনীয় একটি এইচটিএমএল 5 বৈশিষ্ট্য এবং "প্রয়োজনীয়" এর সাথে একই অর্থ রয়েছে = প্রয়োজনীয় = এটি প্রয়োজনীয় কারণ এটির সাথে অন্য কোনও বৈশিষ্ট্য উপলব্ধ নেই।
ইল্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.