2011-06-19 5 views
0

私はたくさんのアイテムを持つフォームを持っています。各項目の横には「削除」ボタンがあります。ボタンの1つが押されると、どのアイテムを削除するかを知るためにどのボタンが押されているかを知る必要があります。送信ボタンに変数を含む最も速い方法はありますか?

今のところ、それぞれのボタンの名前はremove-#で、#はアイテムのインデックスです。 #を取得するには、をすべて POST値にループする必要がありますが、キーがremove-で始まるかどうかを確認し、そうであれば整数を解析します。

O(n)より速いメソッドはありますか?nはポストヴァルスの数ですか?

nが、これは高価な操作になるほど大きいことが、私は好奇心旺盛だ主な理由

ありません。

また、JavaScriptを使用し、各ボタンにonclickイベントを入れて、別の隠し入力にインデックスを移動することをお勧めします。 JavaScriptを使用しないでください。

+0

名前は、送信するすべての要素で 'remove []'にすることができます。あなたはサーバサイドの配列としてそれらにアクセスできます – Ibu

+0

@lbu:Nope。私はそれがPHPのものだと思うし、とにかく* 1つの* submitボタンしか送られないので、うまくいきません。 – mpen

答えて

1

オプションは、それぞれの削除ボタンを別のフォームに置くことです。一定の名前の隠し値と削除するアイテムの値を指定します。

+0

しかし、残念なことに、ページに保存する必要がある他の入力があるため、私はできません。私はすべてを提出するために、私は再びそれらを補充するためにそれを送ることができるようにする必要があります。 – mpen

0

これは本当にJavascriptのドメインです。しかし、onclickを追加することはこれを行うための素晴らしい方法ではありません。彼らは常に、任意のDOM属性を許可されてHTML5のデータ属性と控えめなリスナーがDATA-がHTML5の事であるにもかかわらず

<input type='button' class='remove-button' name='remove' data-remove-attr='5'> 

$('.remove-button').live("click", function() { 
    alert($(this).attr("data-remove-attr")); // Alerts 5. 
}); 

はJQuery/HTML5に、例えば...使用し、それはなど、古いIE、との下位互換性があります。

編集:アクションとして$( '#remove - ' + id).hide();を実行した場合、これはO(1)であることに注意してください。

+0

同じ考えです。まだJSを避けようとしています。そして率直に言って、無効なHTML属性を使用するのは、onclickイベントを使用するより悪いことです。 **編集:**心配しないでください。私は 'data-'がHTML 5であることを知らなかった。私はそれが*無効*ではないと思うが、HTML5に依存することは私のno-JSルールよりも悪い。私たちはここの理想的な世界に住んでいません。 JSが有効になっていないか、ブラウザがHTML5と互換性があると仮定しようとしています。 – mpen

+1

古いブラウザでもHTML5との互換性はありませんが、DOMに任意の(標準ではない)データを保存することができます。これは私が今までに見つけた限り、IE6に戻ってきます。 – Stephen

1

dictにPOST値が格納されている場合は、これを回すことができ、remove-#のように見えるものを探すのではなく、すべてremove-#を生成してdictを索引付けしようとします。これは検索をO(m)に限定します。ここで、mは削除可能な要素の数です。

+0

Aha!賢い!最初の正解です。そして私は 'm'の価値を知っているので、私は検索スペースを制限することができます。 – mpen

関連する問題