【问题标题】:How to solve On change going into infinite loop?如何解决更改进入无限循环?
【发布时间】:2014-01-02 08:41:06
【问题描述】:

 <telerik:RadDateTimePicker ID="rdtp_arrival" runat="server"></telerik:RadDateTimePicker>
 <telerik:RadDateTimePicker ID="rdtp_departure" runat="server" ClientEvents-OnDateSelected="cng_departure"></telerik:RadDateTimePicker>
<telerik:RadNumericTextBox ID="rnt_night" runat="server" Culture="en-US" DataType="System.Int32" DbValueFactor="1" LabelWidth="64px" MinValue="1" ShowSpinButtons="True" Width="100%" ClientEvents-OnValueChanged="inc_check">
    <NegativeStyle HorizontalAlign="Center" />
    <NumberFormat ZeroPattern="n"></NumberFormat>
    <DisabledStyle HorizontalAlign="Center" />
</telerik:RadNumericTextBox>

JS

function cng_departure() {
var datePicker11 = $find("<%= rdtp_arrival.ClientID %>");
var datePicker12 = $find("<%= rdtp_departure.ClientID %>");
var minutes = 1000 * 60;
var hours = minutes * 60;
var days = hours * 24;
var valueTbx = $find('<%=rnt_night.ClientID %>');
valueTbx.set_value(Math.ceil((datePicker12.get_selectedDate() - datePicker11.get_selectedDate()) / days));
}

function inc_check() {
     var datePicker1 = $find("<%= rdtp_arrival.ClientID %>");
     var datePicker2 = $find("<%= rdtp_departure.ClientID %>");
     var date = datePicker1.get_selectedDate();
     date.setDate(date.getDate() + parseInt($('#<%= rnt_night.ClientID %>').val()));
     datePicker2.set_selectedDate(date);
 }

当我增加夜晚或更改出发日期时,它会进入一个无限循环,相互调用 inc_check 和 cng_departure 方法,直到站点崩溃。 如果我从任何一个控件中删除 onchange 事件,它就会正常工作。 现在该怎么办?

【问题讨论】:

    标签: javascript jquery telerik


    【解决方案1】:

    创建 JavaScript 函数 CalculateDateDifference(source, destination) 现在,在 page_init 事件中将此函数附加到两个文本框,如下所示

     rdtp_departure.Attributes.Add("onblur", @"javascript:CalculateDateDifference('" 
                                                        +   rdtp_departure.ClientID + "','" 
                                                        + rnt_night.ClientID + "')");
    
     rdtp_departure.Attributes.Add("onblur", @"javascript:CalculateDateDifference('" 
                                                        + rnt_night.ClientID + "','" 
                                                        + rdtp_departure.ClientID + "')");
    

    现在在该 JavaScript 函数中编写问题特定逻辑。希望这会对您有所帮助。

    【讨论】:

      【解决方案2】:
      1. rdtp_departure改变时,它会调用cng_departure,因此

        ClientEvents-OnDateSelected="cng_departure"
        
      2. cng_departure 更改 rnt_night 并因此调用 inc_check。因为cng_departure中的valueTbx指的是rnt_night,而set_value在上面被调用了。

      3. inc_check 更改 rdtp_departure。因为datePicker2 引用rdtp_departure 并且set_selectedDate 被调用。因此,再次执行从 1 到 3 的步骤。

      这就是代码无限运行的原因。

      【讨论】:

        猜你喜欢
        • 2020-05-18
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多