0

「TimePicker」というユーザーコントロールに取り組んでいます。

このユーザー コントロールは、jquery タイムピッカーを利用し、それをラップして、asp.net で簡単に使用できるようにします。

簡単なスクリプトを使用して、jquery タイムピッカーをテキスト ボックスにバインドしています。

$('#<%= timepicker_textbox.ClientID %>').timepicker({
    onClose: function() {
        __doPostBack('<%= timepicker_textbox.ClientID %>', '');
    }        
});

また、ユーザーが時間を選択してポストバックが発生した後にページ全体が更新されるのを避けるために、このテキストボックスを更新パネル内に配置することも選択しました。

問題は、更新パネルがリロードされた後、ページ内のスクリプトが再度実行されないため、jquery タイムピッカーがテキスト ボックスに適用されないことです。

次のコードを追加することで、これを修正できました。

Sys.Application.add_load(function () {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(<%= timepicker_textbox.ClientID %>_onControlLoad());
});


function <%= timepicker_textbox.ClientID %>_onControlLoad()
{
    $('#<%= timepicker_textbox.ClientID %>').timepicker({
        onClose: function() {
            __doPostBack('<%= timepicker_textbox.ClientID %>', '');
        }        
     });
}

これにより、関数が登録され、部分的なポストバックごとに再度実行されます。

問題は、この特定のタイムピッカーの問題のみが修正され、同じページ内の他の要素では修正されないことです!

ページ内に複数のタイムピッカーがあり、1 つのタイムピッカーで時間を選択すると、他のタイムピッカーが機能しないため、これは私にとって大きな問題です...

どんな提案でも大歓迎です。

ありがとう、

エイタン。

4

2 に答える 2

0

簡単な解決策は、機能が必要なテキストボックスにclass = "timepicker"を追加してから、次のように使用することです。

$(document).ready(function(){
    $('.timepicker').timepicker({
        onClose: function() {
            __doPostBack($(this).attr('id'), '');
        }        
     });
});

一般に、サーバーからクライアント側の動作を駆動することから逃れる方法を学びます。これは、その考え方がjQueryの非常に単純な選択/追加動作パラダイムに適合しないためです。更新パネル/ポストバック全体も本当に古い学校ですが、それを使用する必要がある場合は、上記の機能を以前とSys.WebForms.PageRequestManager.getInstance().add_endRequest同じように登録する必要があります。または$(document).ready、更新パネルの内側に配置するだけでも機能する可能性があります。

于 2012-07-30T11:28:14.963 に答える
0

ページで Updatepanel を使用すると、コントロールの ID が変更され、jquerydocument.readyイベントが適切に呼び出されませんでした。詳細については、こちらを参照してください。

http://www.dotnetfunda.com/articles/article471-jquery-and-aspnet-ajax-updatepanel.aspx

更新パネルを使用したjquery

于 2012-07-30T10:44:04.483 に答える