0

Dev Gurus: 助けが必要です。次の機能を持つ外部 .js ファイルがあります。

function bindDates(effDate, endDate, attrType) {
    //Declare variables to be used in the JavaScript Function
    var effDateID = effDate.get_id();
    var endDateID = endDate.get_id();
    var tmp = attrType;

    //RBD THIS IS KEY TO THE DATEPICKER BOXES>>>>>>>> THIS IS THE KEY -------------      TRY TO BREAK UP>>>>>>>>>
    //$(effDate.get_element()).on('validDateEntered', { effID: effDateID, endID: endDateID, type: tmp }, function (evt) {
    //    setEffectiveDates($find(evt.data.effID), $find(evt.data.endID), evt.data.type);
    //});

    $(effDate.get_element()).on('validDateEntered', { effID: effDateID, endID: endDateID, type: tmp }, function (evt) {
        setEffectiveDates($find(evt.data.effID), $find(evt.data.endID), evt.data.type);
    });

    effDate.add_dateSelected(function (sender, args) {
        validateDatesRange(effDate, endDate);
    });

    effDate.get_dateInput().add_blur(function (sender, args) {
        validateDatesRange(effDate, endDate);
    });

    //$(endDate.get_element()).on('validDateEntered', { effID: effDateID, endID: endDateID, type: tmp }, function (evt) {
    //    setEffectiveDates($find(evt.data.effID), $find(evt.data.endID), evt.data.type);
    //});

    endDate.add_dateSelected(function (sender, args) {
        validateDatesRange(effDate, endDate);
    });

    endDate.get_dateInput().add_blur(function (sender, args) {
        validateDatesRange(effDate, endDate);
    });
}

以下の理解に助けが必要

$(effDate.get_element()).on('validDateEntered', { effID: effDateID, endID: endDateID, type: tmp }, function (evt) {
    setEffectiveDates($find(evt.data.effID), $find(evt.data.endID), evt.data.type);
});

「validDateEntered」の意味がわかりません。これは私が過去の開発者から取り組んでいるコードです。起こっているように見えるのは、有効であれば日付が設定されるということですが、何があっても設定する必要はありません。

後で追加:

 function validateDatesRange(effDateCtrl, endDateCtrl) {
    var result = true,
        effDate = effDateCtrl.get_selectedDate(),
        endDate = endDateCtrl.get_selectedDate(),
        cell = $(effDateCtrl.get_element()).parents('td').first();

    if (effDate && endDate) {
        if (effDate > endDate) {
            var div = "<div class='errorMessage' style='display:none;'>Effective date must be less than end date.</div>";
            $(div).prependTo(cell).fadeIn();
            result = false;
        }
    }

    if (result) {
        cell.find('div.errorMessage').fadeOut(200, null, function () { $(this).remove(); });
        $(effDateCtrl.get_element()).trigger('validDateEntered');
    }
    return result;
}

ページが読み込まれると、複数のグリッドが表示されます。グリッドには編集ボタンがあります。編集ボタンをクリックすると、パネルが表示され、effDate コントロールと endDate コントロールが表示されます。

編集ボタンを 1 回クリックすると、effDate は入力されますが、endDate は入力されません。編集ボタンをもう一度クリックすると、endDate コントロールが読み込まれます。同じクリックで入力する必要があります。問題を捉えることができないので、私はばかげています。編集イベントをトラップできたらいいのにと思いますが、グリッドにも表示されません。ありがとうございます。

4

1 に答える 1

0

「validDateEntered」はカスタム イベントです。.trigger('validDateEntered');それがイベントのソースになるため、コードで を検索する必要があります。これにより、データが有効でない場合でもイベントをトリガーする方法の手がかりが得られます。

カスタム イベントについては、http: //api.jquery.com/trigger/で説明しています。

OP編集後に更新

bindDatesしたがって、日付が選択されているか、日付セレクターがぼやけているときはいつでも、を呼び出すように見えますvalidateDatesRange。日付が有効な場合、validateDatesRange「validDateEntered」カスタム イベントをトリガーし、true を返します。そうでない場合は、イベントをトリガーせずに false を返します。がvalidateDatesRangeトリガーされると、effDate によって有効日が設定されます。

有効かどうかに関係なく発効日を設定する最も簡単な方法 (アプリをまだ理解していないことを考えると、おそらく最も安全な方法) は、次のように置き換えることですvalidateDatesRange()

function validateDatesRange(effDateCtrl, endDateCtrl) {
    $(effDateCtrl.get_element()).trigger('validDateEntered');    
}
于 2013-05-15T19:07:59.103 に答える