135

Web サイトのフォームにいくつかの入力フィールドを挿入する JavaScript (グリースモンキー/ユーザースクリプト) を書いています。

問題は、これらの入力フィールドがフォームに影響を与えたくない、フォームが送信されたときに送信されたくない、JavaScriptがそれらの値にアクセスできるようにしたいだけです。

フォームの途中にいくつかの入力フィールドを追加し、フォームが送信されたときにそれらを送信しないようにする方法はありますか?

明らかに、入力フィールドがフォーム要素にないことが理想的ですが、結果のページのレイアウトで、挿入された入力フィールドが元のフォームの要素の間に表示されるようにしたいと考えています。

4

12 に答える 12

177

「name」属性なしで入力フィールドを挿入できます。

<input type="text" id="in-between" />

または、フォームが送信されたら ( でjQuery)単純に削除することもできます。

$("form").submit(function() {
   $(this).children('#in-between').remove();
});
于 2010-06-09T17:03:57.200 に答える
64

最も簡単な方法は、disabled属性を持つ要素を挿入することです。

<input type="hidden" name="not_gonna_submit" disabled="disabled" value="invisible" />

このようにして、フォームの子として引き続きアクセスできます。

無効なフィールドには、ユーザーがそれらとまったくやり取りできないという欠点があります。そのため、disabledテキスト フィールドがある場合、ユーザーはテキストを選択できません。チェックボックスがある場合disabled、ユーザーはその状態を変更できません。

送信したくないフィールドを削除するために、フォームの送信時に起動する JavaScript を書くこともできます。

于 2010-06-09T17:03:11.710 に答える
24

入力要素から名前属性を削除してみてください。
だからそれは次のように見える必要があります

<input type="checkbox" checked="" id="class_box_2" value="2">
于 2014-01-28T14:30:43.010 に答える
10

フォーム送信に含めたくないすべての入力フィールドから属性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;
于 2010-06-09T17:06:53.230 に答える
5

この投稿が古いことは承知していますが、とにかく返信します。私が見つけた最も簡単で最良の方法は、単に名前を空白に設定することです。

提出前にこれを入れてください:

document.getElementById("TheInputsIdHere").name = "";

全体として、送信関数は次のようになります。

document.getElementById("TheInputsIdHere").name = "";
document.getElementById("TheFormsIdHere").submit();

これにより、他のすべてのフィールドを含むフォームが送信されますが、名前のないフォームは送信されません。

于 2013-07-30T14:13:31.743 に答える
4

入力に​​disabled="disabled"を追加し、.removeAttr('disabled') を使用して送信する場合は、jquery が無効になっている属性を削除します。

HTML:

<input type="hidden" name="test" value="test" disabled='disabled'/>

jquery:

$("input[name='test']").removeAttr('disabled');

于 2016-12-12T12:46:31.780 に答える
1

onSubmit() を介して関数でフォームの送信を処理し、以下のようなことを実行してフォーム要素を削除します: getElementById()DOM の使用、次に使用[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);
}

これにより、探しているものが正確に得られます。

于 2010-06-09T17:04:05.873 に答える
0

そもそもそれらを入力要素にする必要さえありますか? Javascript を使用して、div、段落、リスト項目、または提示したい情報を含むも​​のを動的に作成できます。

しかし、インタラクティブな要素が重要で、それらの要素をブロックの外に配置するの<form>が面倒な場合は、ページが送信されたときにフォームからそれらの要素を削除できるようにする必要があります。

于 2010-06-09T17:04:33.610 に答える
0
$('#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>
于 2015-05-21T15:51:41.520 に答える