0

开发大师:需要一些帮助。我有一个具有以下功能的外部 .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”是什么意思。这是我正在从过去的开发人员那里编写的代码。似乎正在发生的事情是,如果日期有效,日期将被设置,但我需要它来设置 NO MATTER WHAT。

稍后添加:

 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 控件。

当您单击一次编辑按钮时会填充 effDate,但 endDate 不会。如果再次单击编辑按钮,将填充 endDate 控件。我需要在同一次点击时填充它们。我感到很愚蠢,因为我无法解决这个问题。我希望我可以捕获编辑事件,但甚至在网格中都看不到它。提前谢谢。

4

1 回答 1

0

'validDateEntered' 是一个自定义事件。您应该在代码中搜索.trigger('validDateEntered');,因为这将是事件的来源。即使数据无效,这也将为您提供如何触发事件的线索。

这里有一些关于自定义事件的讨论:http: //api.jquery.com/trigger/

OP 编辑​​后更新

So it looks like bindDatessays that whenever a date is selected or the date selector is blurred, call validateDatesRange. 如果日期有效,则validateDatesRange触发“validDateEntered”自定义事件并返回 true。如果不是,则返回 false 而不触发事件。触发时validateDatesRange,effDate 设置生效日期。

设置生效日期的最简单方法,无论它们是否有效(考虑到您还不了解该应用程序,这可能是最安全的方法)是替换validateDatesRange()

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