6

jQuery / JavaScript/Ajaxを使用する際のベストプラクティスについて質問があります。いくつかのタスクがあり、すべてのタスクにカレンダーがあるとしましょう。ユーザーは、タスクカレンダーの日をクリックして、AJAXを介して特定の日にタスクを予約することができます。タスクの日付とIDをどこかに保存する必要があり、次のような非常に奇妙なIDを使用しています。

<span class="day_field" id="date_13-02-2013_task_4">13.02.2013</span>

次に、次のようなリスナーをアタッチします。

$('.day_field').on('click',function(){
    var date = $(this).id.split('_')[1];
    var task_id = $(this).id.split('_')[3];
    //place for some validation
    $.post('book_task.php',{task_id: task_id, date: date},function(data){
        //something cool with the result
    });
});

私の質問は:これはそれを行う正しい方法ですか?IDは非常に長くなる可能性があるため、よくわかりません+データベースにIDが含まれているため、おそらくまったく保存されません。

ありがとう!T。

4

5 に答える 5

8

HTML5データ属性を使用します。

<span class="day_field" data-date="13-02-2013" data-task="4">13.02.2013</span>

$('.day_field').on('click',function(){
    var date = $(this).data("date");
    var task_id = $(this).data("task");
    //place for some validation
    $.post('book_task.php',{task_id: task_id, date: date},function(data){
        //something cool with the result
    });
});
于 2013-02-26T22:31:50.360 に答える
2

正しい方法それを行うためのより良い方法は、データをいずれかのデータ属性に格納するか、スパンをアンカータグにして、href属性に必要なパラメータ文字列を格納することです。

<span class="day_field" data-date="13-02-2013" data-task="4>13.02.2013</span>

or

<a class="day-field" href="?task_id=4&date=13-02-2013">13.02.2013</a>

アンカータグの場合:

$('.day_field').on('click',function(e){
    e.preventDefault();
    $.post("foo.php",this.href,handler);
});
于 2013-02-26T22:31:24.667 に答える
1

IDの代わりに、次のようなカスタムデータ属性を使用できます。

<span class="day_field" data-date="date_13-02-2013_task_4">13.02.2013</span>

そして、jQueryで次のような値にアクセスできます。

$(".day_field").data("date");
于 2013-02-26T22:31:59.673 に答える
0

データベース内の何かの実際のIDを公開することは、データベースと同じくらい安全ではありません。

要素のofを使用することidは、それが物事を一意に識別する場合、私にとっても問題ないように思われます。属性を使用するdataと、必要に応じて分割ロジックを節約できますが、それでもidタンデムで使用できます。

従来、これはjQueryの多くと比較して非常に使い慣れたコードです。

于 2013-02-26T22:31:25.740 に答える
0

データを要素に関連付けるもう1つの洗練された方法は、jQueryのデータを使用することです。ただし、jQueryプラグインを作成し、タスクごとにそのインスタンスを1つ使用することを検討します。プラグインは必要なすべてのデータをカプセル化するので、要素に関連付けて保存する必要はありません。これは素晴らしいことではありません。

于 2013-02-26T22:32:34.553 に答える