7

テキストボックスで使用するjQueryプラグインに取り組んでおり、日付ピッカーなどのテキストボックスを使用するjQueryUIウィジェットで動作させたいと考えています。値が実際に設定される前に日付ピッカーのblurイベントがスローされたように見えるため、これが問題を引き起こしています。

私が使用した回避策は、コードを実行する前にタイムアウトを設定して、datepickers値を設定する時間を確保することです。以下のコードを参照してください。

$(this).blur(function() {
    // $(this).val() == ""
    var elem = $(this);
    setTimeout(function() {
        //elem.val() != ""
    },100);
});

この回避策が問題の最善の解決策であるか、または常に機能する場合でも、私にはわかりません。タイムアウトを100ではなく10ミリ秒に設定すると、機能しません。何らかの理由でコードの実行が遅いかどうかが心配です。100では必ずしも十分ではない可能性があります。

誰かがこの問題のより良い解決策を考えることができますか?

4

3 に答える 3

7

onClose最終的に、私の解決策は、問題のテキストボックスが日付ピッカーによって使用されている場合(クラスをチェックすることによって) 、イベントに動的にフックすることでしたhasDatepicker。これに関する問題は、日付ピッカーが特定のイベントにアタッチされた関数を 1 つしか持つことができないため、通常のようにイベントにバインドできないことです。これを回避するために、関数が既にアタッチされているかどうかを確認し、アタッチされている場合はコードの後に​​呼び出します。

var elem = $(this);
var someFunction = function() {
    //elem.val() != ""
}
if (elem.hasClass('hasDatepicker')) {
    var onClose = elem.datepicker('option','onClose');
    elem.datepicker('option','onClose', function() {
        someFunction();
        if (onClose) { onClose(elem.val()); }
    });
} else {
    elem.bind('blur',someFunction);
}
于 2012-10-30T09:07:11.777 に答える
5

onSelectdatepicker には、または関連付けることができるいくつかのイベントがありonClosethisその中には datepicker selector である入力があります。datepickerui引数を使用して値を取得することもできます

$(selector).datepicker({
     onClose:function(evt, ui){             
          $(this).myPlugin('someMethod');
     })
})
于 2012-10-29T18:11:24.703 に答える
1

これはより簡単な方法です:

$('#element').datepicker({
    onClose: function() {
        $(this).trigger('change');
    }
});


$('#element').bind('change',function(){
    // someFunction();
});
于 2015-04-03T14:49:55.323 に答える