1. ホーム
  2. html

[解決済み] Google Chromeで「無効なフォームコントロールです」と表示される。

2022-11-22 04:51:36

質問

下記のコードはSafariでは正常に動作しますが、ChromeとFirefoxではフォームが送信されません。 Chromeのコンソールはエラーを記録します。 An invalid form control with name='' is not focusable . 何かアイデアはありますか?

以下のコントロールには名前がありませんが、以下のJavascriptによって入力され、送信時に名前を持つことに注意してください。 このフォームは Safari で動作します。

<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>

どのように解決するのですか?

Chrome は、「このフィールドに入力してください」というメッセージをポップアップできるように、必須だがまだ空のコントロールに焦点を当てたいと考えています。 しかし、Chrome がメッセージをポップアップしたい時点でコントロールが非表示になっている場合、つまり、フォームの送信時に、非表示になっているため Chrome はコントロールに焦点を当てることができず、したがって、フォームは送信されません。

そこで、この問題を回避するために、コントロールがjavascriptによって隠されるとき、そのコントロールから「required」属性を削除する必要があります。