2

http://labs.perifer.se/timedatepicker/の Jquery タイムピッカーを使用しています。

ビューには、今回のピッカー コントロールがあります。

   $("#startTime").timePicker({
        startTime: "09.00", 
        endTime: new Date(0, 0, 0, 19, 0, 0), 
        show24Hours: false,
        separator: '.',
        step: 30
    });

特定の時間 (午前 11 時など) が以前に選択されている (そしてデータベースに保存されている) 場合、その特定のオプションは無効になり、以降の選択には使用できなくなります。MVC コントローラーでは、サービス層を介して、以前に選択したすべての時間の「リスト」を取得しています。

    public ActionResult DisableTimes(param1, param2)
    {            
        List<string> listTimes = Webservice(param1,param2);
        //getting previously saved times - above line
        return Json(listTimes, JsonRequestBehavior.AllowGet);
    }

このような Java スクリプト関数で ajax 呼び出しを行っています。これは、パラメーターを MVC コントローラーに渡し、時間のリストを返します。

       $.ajax({

          "url": "/ControllerName/DisableTimes/",
          "type": "get",
          "dataType": "json",
          "data": { param1: $("#paramval1").val(), param2: $("#paramvalue2").val() },
          "success": function (listTimes) {

              //Code here - use the listTimes values and disable the 
              //appropriate timepicker drop down choices.
               }
           });

Jquery Timepicker の選択を無効にするために、コントローラーから取得している時間のリスト「listTimes」をどのように利用できますか?

4

3 に答える 3

1

どうやら、この日付ピッカー プラグインでは、彼の動作を削除することはできません。

しかし、ドキュメントから要素を削除できると思います。

もう一度追加します。

使用:

http://api.jquery.com/remove/

http://api.jquery.com/add/

または、毎回2つの要素を持ち、必要なものを表示/非表示にするか、次を使用することもできます:

http://api.jquery.com/hide/

http://api.jquery.com/show/

于 2012-05-30T10:12:55.663 に答える
1

次の方法で、利用可能なオプションから li を削除できるはずです。

$(listTimes).each(function() {
    $('.time-picker').find('li:contains("' + this + '")').remove();
});

編集:

ただし、ページに複数のタイムピッカーがある場合は少し難しくなります。:firstセレクターを追加して、初めてのピッカーのみを取得できるはずです。

$('.time-picker:first').find('li:contains("' + this + '")').remove();

ライブデモ

于 2012-05-30T12:31:52.213 に答える
1

プラグインがデフォルトでその機能を提供しているようには見えません。プラグイン コードのこれらの行を少し変更します (リストに追加する部分)。

// Build the list
    for(var i = 0; i < times.length; i++) {
      $tpList.append("<li>" + times[i] + "</li>");
    }

各liにいくつかの識別子を追加するものに:

for(var i = 0; i < times.length; i++) {
      $tpList.append("<li class='"+times[i]+'">" + times[i] + "</li>");
    }`

これらの li 要素を簡単に選択できるようにするために、成功ハンドラーで次のようにします。

    "success": function (listTimes) {
         $(listTimes).each(function(i,item){
               $('li.'+item).remove();
         });
        //or may be if you are just getting an array of strings from the webservice then something like this will be enough: $('.'+listTimes.join(',.')).remove();
     }

また、timepicker プラグイン呼び出し $("#startTime").timePicker を ajax 成功コールバック内に配置して、おそらくプラグインの初期化後に ajax コールバックが発生するため、競合状態が発生しないようにします。

もう 1 つの方法は、$('#startTime').change を処理し、時間が許可されていないかどうかを確認し、ユーザーにエラーを表示することです。

于 2012-05-30T12:08:44.533 に答える