作成日: 2024/03/29 最終更新日: 2024/03/29
文書種別
不具合
発生環境
対象バージョン:
V4.1J
対象コントロール:
GcTextBox、GcMultiLineTextBox、GcMask、GcNumber、GcDateTime、GcComboBox
状況
回避方法あり
詳細
上記の対象コントロールで、watermarkDisplayNullTextプロパティを設定しているとき、コントロールに値を入力せずにフォーム送信すると、watermarkDisplayNullTextプロパティに設定した値がフォームデータとして設定されます。
例えば、以下のようなコードを実行して、GcTextBoxに値を入力せずにSubmitボタンを押下すると、フォームデータとして「test」が設定されます。本来は値が何も設定されないのが正しい動作となります。
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://cdn.grapecity.com/inputmanjs/hosted/css/gc.inputman-js.css">
<script src="https://cdn.grapecity.com/inputmanjs/hosted/scripts/gc.inputman-js.ja.js"></script>
</head>
<body>
<div>
<form action="" id="myForm">
<label for="gcTextBox">TextBox: </label>
<input id="gcTextBox" name="gcTextBox">
<br><br>
<button type="submit" id="submitData">Submit</button>
</form>
</div>
<script>
const gcTextBox = new GC.InputMan.GcTextBox(document.getElementById('gcTextBox'), {
watermarkDisplayNullText: 'test',
});
document.querySelector('#submitData').addEventListener('click', (e) => {
e.preventDefault();
var formData = new FormData(document.getElementById("myForm"));
var text = formData.get("gcTextBox");
onsole.log('data: ', text);
})
</script>
</body>
</html>
回避方法
以下のコードを追加することで回避可能です。
function keepInputName(control) {
const input = control.getUIInputElement();
const originalInput = control.getOriginalInputElement();
originalInput.setAttribute('name', input.getAttribute('name'));
input.removeAttribute('name');
}
keepInputName(gcTextBox);