HTMLテーブルがあり、最初の列にIDがあります。この列は非表示です。私は今これを読んだことがありますが、これは悪いアプローチです。
しかし、ユーザーが行を選択し、削除ボタンをクリックしてこの ID で ajax 投稿を行うときに、この非表示の ID が必要です。
行ごとにこのIDを別の場所に配置する必要がありますが、このアプローチが悪いのはなぜですか?
どこに配置しても、ブラウザーに転送された HTML に特定のデータが含まれていれば、ユーザーはそれを見ることができます。
非表示にするなどして間接的にすることはできますが、これを行うと決して安全になりません。
私の提案は、クライアント側で物事を隠そうとするよりも、削除操作を試みる人がそうする権限を持っていることを保証する、サーバー側にある種の厳密なアクセス制御メカニズムを実装することです.
推測できないようにするために、ID をクライアントに送信する前に、ある種の暗号化を ID に適用することを検討することもできます。
行要素ごとにデータ属性を追加し、行をクリックしたときにそれを読み取ることができます。ここでの利点は、データ属性値が画面に表示されないことです。
表の行に ID を属性として追加します。このようなもの:
<tr data-id="1">
<td><span class="delete">Delete</span></td>
</tr>
<tr data-id="2">
<td><span class="delete">Delete</span></td>
</tr>
ユーザーが削除または編集をクリックすると、jqueryで取得します。
$('.delete').bind('click', function (e) {
var $row = $(this).closest('tr');
var id = $row.attr('data-id');
// now you have `id`
});
資格情報としての機密データには、クライアント側からアクセスできません。しかし、機密データと呼ばれるものがわからないので、jquery データ オブジェクトを使用することをお勧めします。これには、DOM を可能な限りクリーンに保つという利点があります。
//head or any DOM element
$('head').data('key','myValue'); //set
var value = $('head').data('key'); //get
すでに行ごとに「削除ボタン」がある場合、通常の規則では、次のように、各フォーム内の非表示の入力フィールドに id を配置します。
<tr>
<td>John Smith</td>
<td>37</td>
<td>
<form action="/delete">
<input type="hidden" name="id" value="id_for_this_row">
<button type="submit">Delete</button>
</form>
</td>
</tr>
このコードは、Javascript がまったくなくても機能します。その後、AJAX などを使用してフォームをバックグラウンドで投稿することにより、動作を強化したい場合は、それを上に追加するだけです。
あなたのアプリケーションがすでに AJAX である場合、または ごとに別のフォームを使用できない場合は<tr>
、Sampath の答えが頼りになります (data-id
各 に属性を追加します<tr>
)。