如何解决变化进入无限循环?

时间:2014-01-02 08:41:06

标签: javascript jquery telerik

enter image description here

 <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事件它可以正常工作。 现在该怎么办?

2 个答案:

答案 0 :(得分:2)

创建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函数中编写问题特定的逻辑。希望这会对你有所帮助。

答案 1 :(得分:1)

  1. 更改rdtp_departure后,会调用cng_departure,因此

    ClientEvents-OnDateSelected="cng_departure"
    
  2. cng_departure更改了rnt_night,因此调用了inc_check。因为valueTbx中的cng_departure引用了rnt_night并且set_value被调用了。

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

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