私はいくつかの入力フィールドをWebサイトのフォームに挿入するjavascript(greasemonkey/userscript)を書いています。
問題は、これらの入力フィールドがフォームに何らかの影響を与えたくない、フォームが送信されたときにそれらが送信されたくない、javascriptがそれらの値にアクセスできるようにしたいだけだということです。
フォームの中央に入力フィールドを追加し、フォームの送信時にそれらを送信しないようにする方法はありますか?
当然、入力フィールドがフォーム要素にないことが理想ですが、挿入された入力フィールドが元のフォームの要素の間に表示されるように、結果のページのレイアウトが必要です。
「名前」属性なしで入力フィールドを挿入できます。
<input type="text" id="in-between" />
または、フォームが送信されたら(jQuery
で)単に削除することもできます。
$("form").submit(function() {
$(this).children('#in-between').remove();
});
最も簡単な方法は、disabled
属性を持つ要素を挿入することです。
<input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" />
この方法では、フォームの子として引き続きアクセスできます。
無効なフィールドには、ユーザーがまったく操作できないという欠点があります。したがって、disabled
テキストフィールドがある場合、ユーザーはテキストを選択できません。 disabled
チェックボックスがある場合、ユーザーはその状態を変更できません。
フォーム送信時に起動するJavaScriptを記述して、送信したくないフィールドを削除することもできます。
入力要素からname属性を削除してみてください。
したがって、次のように見える必要があります
<input type="checkbox" checked="" id="class_box_2" value="2">
フォーム送信に含めないすべての入力フィールドからonsubmit
属性を削除するname
のイベントハンドラーを作成できます。
以下に、テストされていない簡単な例を示します。
var noSubmitElements = [ 'someFormElementID1', 'someFormElementID2' ]; //...
function submitForm() {
for( var i = 0, j = noSubmitElements.length; i < j; i++ ) {
document.getElementById(noSubmitElements[i]).removeAttribute('name');
}
}
form.onsubmit = submitForm;
追加のオプションを追加したかっただけです。入力にformタグを追加し、ページに存在しないフォームの名前を指定します。
<input form="fakeForm" type="text" readonly value="random value" />
入力にdisabled = "disabled"を追加し、jqueryが.removeAttr( 'disabled')を使用して送信する場合、無効にされた属性を削除します。
HTML:
<input type="hidden" name="test" value="test" disabled='disabled'/>
jquery:
$("input[name='test']").removeAttr('disabled');
私はこの投稿が古いことを知っていますが、とにかく返信します。私が見つけた最も簡単で最良の方法は、単に名前を空白に設定することです。
提出する前にこれを置いてください:
document.getElementById("TheInputsIdHere").name = "";
すべての送信関数は、次のようになります。
document.getElementById("TheInputsIdHere").name = "";
document.getElementById("TheFormsIdHere").submit();
これにより、他のすべてのフィールドを含むフォームが送信されますが、名前のないフォームは送信されません。
フォームでonsubmitを追加する必要があります。
<form action="YOUR_URL" method="post" accept-charset="utf-8" onsubmit="return validateRegisterForm();">
スクリプトは次のようになります。
function validateRegisterForm(){
if(SOMETHING IS WRONG)
{
alert("validation failed");
event.preventDefault();
return false;
}else{
alert("validations passed");
return true;
}
}
これはいつも私のために働く:)
OnSubmit()を介して関数でフォームの送信を処理し、フォーム要素を削除するために以下のようなことを実行します。DOMのgetElementById()
を使用し、次に[object].parentNode.removeChild([object])
を使用します
問題のフィールドにid属性「my_removable_field」コードがあるとします。
var remEl = document.getElementById("my_removable_field");
if ( remEl.parentNode && remEl.parentNode.removeChild ) {
remEl.parentNode.removeChild(remEl);
}
これにより、探しているものを正確に取得できます。
そもそもそれらを入力要素にする必要がありますか? Javascriptを使用して、div、段落、リストアイテム、または表示したい情報を含むものを動的に作成できます。
しかし、インタラクティブな要素が重要であり、<form>
ブロックの外側にこれらの要素を配置するのが苦痛なら、ページが送信されたときにフォームからそれらの要素を削除することができるはずです。
$('#serialize').click(function () {
$('#out').text(
$('form').serialize()
);
});
$('#exclude').change(function () {
if ($(this).is(':checked')) {
$('[name=age]').attr('form', 'fake-form-id');
} else {
$('[name=age]').removeAttr('form');
}
$('#serialize').click();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="/">
<input type="text" value="John" name="name">
<input type="number" value="100" name="age">
</form>
<input type="button" value="serialize" id="serialize">
<label for="exclude">
<input type="checkbox" value="exclude age" id="exclude">
exlude age
</label>
<pre id="out"></pre>