1. ホーム
  2. javascript

[解決済み] HTMLフォームのSELECTタグ/入力の読み取り専用化

2022-03-14 20:48:57

質問

HTMLの仕様によると select タグは、HTMLでは readonly 属性のみです。 disabled 属性を使用します。ですから、ユーザーがドロップダウンを変更できないようにしたい場合は disabled .

唯一の問題は、無効化されたHTMLフォーム入力はPOST/GETデータに含まれないということです。

をエミュレートするのに最適な方法は何でしょうか? readonly 属性は select タグを使用しても、POST データを取得できますか?

解決方法は?

を維持する必要があります。 select 要素 disabled を追加し、さらにもう1つの隠し input を同じ名前と値で指定します。

SELECTを再び有効にする場合は、onchangeイベントでその値をhidden入力にコピーし、hidden入力を無効化(または削除)する必要があります。

以下はデモです。

$('#mainform').submit(function() {
    $('#formdata_container').show();
    $('#formdata').html($(this).serialize());
    return false;
});

$('#enableselect').click(function() {
    $('#mainform input[name=animal]')
        .attr("disabled", true);
    
    $('#animal-select')
        .attr('disabled', false)
    	.attr('name', 'animal');
    
    $('#enableselect').hide();
    return false;
});
#formdata_container {
    padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    <form id="mainform">
        <select id="animal-select" disabled="true">
            <option value="cat" selected>Cat</option>
            <option value="dog">Dog</option>
            <option value="hamster">Hamster</option>
        </select>
        <input type="hidden" name="animal" value="cat"/>
        <button id="enableselect">Enable</button>
        
        <select name="color">
            <option value="blue" selected>Blue</option>
            <option value="green">Green</option>
            <option value="red">Red</option>
        </select>

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

<div id="formdata_container" style="display:none">
    <div>Submitted data:</div>
    <div id="formdata">
    </div>
</div>