2014-02-14 110 views
0

我有一個Telerik RadComboBox,當更改觸發某些使用AJAX從數據庫中獲取數據並使用值填充第二個下拉列表的Javascript時。問題是,我想根據第二個下拉列表中所做的選擇來填充一些帶有數據的文本框。第二個下拉列表是一個標準的ASP.NET下拉列表。下面是兩個dropdownlists代碼:SelectedIndexChange事件不會觸發動態創建的下拉列表

<telerik:RadComboBox ID="rcbCustomer" runat="server" CssClass="form-control field-standard-size fix-background-white input-sm" width ="300px" Height="140px" 
         EmptyMessage="Type here to find sold-to customer" LoadingMessage="Please wait, loading..." AutoPostBack="true" 
         RegisterWithScriptManager="false" EnableEmbeddedScripts="true" EnableVirtualScrolling="true" OnClientSelectedIndexChanged="rcbCustomer_IndexChanged"> 
        </telerik:RadComboBox> 


<asp:DropDownList ID="hidShipTo" runat="server" Height="24px" Font-Size="x-small" CssClass="form-control input-sm width-300 form-fixer" AutoPostBack="True" ></asp:DropDownList> 

當第一個下拉改變它觸發此Javascript功能,填充第二個列表:

function rcbCustomer_IndexChanged(sender, args) { 

       //var strData = $("#<%=rcbCustomer.ClientID%>").val() 
       var strComboID = $find("<%=rcbCustomer.ClientID%>"); 
       var strValue = strComboID.get_value(); 
       var strData = "{strCustomerSoldSelected: '" + strValue + "' }"; 
       //alert(strData); 
       $.ajax({ 
        type: "POST", 
        url: "/webservices/ProductServer.asmx/GetShipToData", 
        data: strData, 
        contentType: "application/json; character=utf-8", 
        dataType: "json", 
        success: function (msg) { 
         $("#<%=hidShipTo.ClientID %>").empty().append($("<option></option>").val("[-]").html("Please select")); 
         $.each(msg.d, function() { 
          $("#<%= hidShipTo.ClientID %>").append($("<option></option>").val(this['Value']).html(this['Text'])); 
         }); 
        }, 
        failure: function (xhr, ajaxoptions, thrownError) { 
         alert("Error1:" + xhr.status); 
         alert("Error2:" + thrownError); 
        } 
       }); 
       //alert("the end"); 
      } 

我然後綁定change事件第二下拉列表如下:

$("#<%=hidShipTo.ClientID%>").change(hidShipTo_IndexChanged()); 

然後我希望它運行另一個函數,使用AJAX獲取數據來填充其他文本框。下面是功能(現在它被設置爲只是做一個警告,直到我知道它運行):

function hidShipTo_IndexChanged(sender, args) { 
       var strData = ""; 
       alert("yes"); 
       $.ajax({ 
        type: "POST", 
        url: "/webservices/ProductServer.asmx/PopulateShipToDetails", 
        data: strData, 
        contentType: "application/json; character=utf-8", 
        dataType: "json", 
        success: function (msg) { 
         alert(msg); 
        }, 
        failure: function (xhr, ajaxoptions, thrownError) { 
         alert("Error1:" + xhr.status); 
         alert("Error2:" + thrownError); 
        } 
       }); 
      } 

的問題是,改變事件似乎並沒有觸發。任何想法可能是什麼原因或可能是一種不同的方法?

回答

0

我從一個ASP下拉列表更改爲常規選擇輸入控制和適當的約束和代碼現在正常運行的情況下解決了這個問題。這是一個消除回發刷新的轉換,所以我真的不需要ASP下拉列表。我仍然很好奇爲什麼事件不能正確地綁定,但問題現在已經解決了。我想發佈這個以防其他人有類似的問題。感謝大家的幫助!

0

您還沒有分配的功能,你在呼喚它

$("#<%=hidShipTo.ClientID%>").change(hidShipTo_IndexChanged()); 
                  ^^^ 

需求是

$("#<%=hidShipTo.ClientID%>").change(hidShipTo_IndexChanged); 
                  ^^^ 
+0

謝謝,但是讓這個改變仍然不會觸發事件 –

+0

添加事件時,元素是否存在?你真的在列表中選擇不同的選項嗎?簡單測試:'console.log($(「#<%= hidShipTo.ClientID%>」)。length);'當用戶更改或Ajax回調代碼更改值時,您是否希望觸發更改事件? – epascarello

+0

是的,我已經做了長度檢查,它看到選擇器。我期望在用戶更改下拉列表時觸發更改事件。我懷疑是因爲原來的AJAX填充下拉存在有一個問題,因爲即使我可以看到在下拉列表3項,當我做了查看源文件有剛不帶選項標籤,因爲添加的選項由以前的AJAX調用。有任何想法嗎? –

1

要調用函數不將其分配給事件處理程序

變化

$("#<%=hidShipTo.ClientID%>").change(hidShipTo_IndexChanged()); //Remove() 

$("#<%=hidShipTo.ClientID%>").change(hidShipTo_IndexChanged); 
+0

謝謝,但該事件仍不會觸發 –

0

你可以看看這個服務器端的指令是如何在客戶端渲染處理是從匿名函數調用它

$("#<%=hidShipTo.ClientID%>").change(hidShipTo_IndexChanged()); 
+0

它配備經過是這樣的: '$( 「#ContentPlaceHolder1_hidShipTo」)改變(函數(){hidShipTo_IndexChanged();});' –

+0

好了,該解決方案給予通過satpal – DadyFuji

+0

不,這並沒有導致事件發生。 –

0

的最佳方式。

這樣的:

$("#<%=hidShipTo.ClientID%>").change(function(){hidShipTo_IndexChanged();}); 
+0

感謝所有這些建議,但更大的問題似乎是.change事件根本沒有觸發。我寫這樣的代碼: '$(「#<%= hidShipTo.ClientID%>」)。change(function(){alert('yes';});' 沒有出現!那麼不會觸發? –

+0

事件處理程序大部分時間都無法綁定到事件,因爲它試圖在元素不存在時進行分配,換句話說,在綁定發生之前DOM已準備就緒,這非常重要。 – JonnieJS

相關問題