2013-03-25 43 views
0

我已經使用jquery爲我的下拉菜單生效,但插入jquery後我無法獲得selectedindexed更改的函數的工作。但是,當我刪除jQuery,那麼所有似乎工作正常。Dropdown selectedindex當使用jquery時不會觸發

另一件事,在下拉菜單中應用jquery後,下拉菜單中的所有項目都顯示爲列表項「li」而不是選項。

我已經嘗試過使用javascript函數,但每當我在下拉菜單中使用jquery時也會發生同樣的情況。

代碼都爲:後面的代碼

<asp:DropDownList ID="DropDownProducts" Width="150px" CssClass="RegistryDrop" 
    runat="server" AutoPostBack="True" OnDataBinding="dropprodsbinding" 
    OnSelectedIndexChanged="DropDownProducts_SelectedIndexChanged" 
    DataTextField="Name" AppendDataBoundItems="True" 
    DataValueField="id"> 
</asp:DropDownList> 

代碼放在這裏:

function getSelectOptions(parentid) { 
    var select_options = new Array(); 
    var ul = document.createElement('ul'); 
    $select.children('option').each(function() { 
     var li = document.createElement('li'); 
     li.setAttribute('id', parentid + '_' + $(this).val()); 
     li.innerHTML = $(this).html(); 
     if ($(this).is(':selected')) { 
      $input.val($(this).html()); 
      $(li).addClass(opt.currentClass); 
     } 
     ul.appendChild(li); 
     $(li) 
     .mouseover(function (event) { 
      hasfocus = 1; 
      if (opt.debug) console.log('over on : ' + this.id); 
      jQuery(event.target, $container).addClass(opt.hoverClass); 
     }) 
     .mouseout(function (event) { 
      hasfocus = -1; 
      if (opt.debug) console.log('out on : ' + this.id); 
      jQuery(event.target, $container).removeClass(opt.hoverClass); 
     }) 
     .click(function (event) { 
      var fl = $('li.' + opt.hoverClass, $container).get(0); 
      if (opt.debug) console.log('click on :' + this.id); 
      $('li.' + opt.currentClass).removeClass(opt.currentClass); 
      $(this).addClass(opt.currentClass); 
      setCurrent(); 
      hideMe(); 
     }); 
    }); 
    return ul; 
} 

希望能得到一些解決方案。謝謝

+0

請發表您的html代碼 – 2013-03-25 14:06:44

+0

2013-03-25 14:11:44

+0

只是一個說明:JavaScript實際上並沒有代碼隱藏。它在客戶端執行。代碼隱藏是在服務器上執行的C#/ VB代碼。 – 2013-03-25 14:17:18

回答

0

您的javascript/jquery代碼正在將下拉列表轉換爲客戶端瀏覽器中的無序列表。發生轉換後,ASP.net控件進入下拉菜單的任何掛鉤都不再存在,因爲下拉列表已被替換爲ul結構。

最終,所有回發操作都是由於ASP.Net嵌入到HTML元素中的javascript代碼而發生的。所以當你替換這個元素時,這些動作都不會被調用。

理論上,您應該能夠識別那些附件使用客戶端分析(Chrome開發人員工具或Firebug)的內容,以查看在頁面的非jQuery版本中<select附加了哪些功能/事件。一旦你確定了這些事件,你可以將它們作爲函數存儲在javascript中,並將它們附加到<ul結構上的事件上,jQuery將替換<select

你必須做你結束了一些分析,看看肯定是怎麼回事,但它可能是因爲像那樣簡單(其中mySelectmyUL的標識符與您的真實selectul元素):

var functionToExec = $('#mySelect').click; 
$('#myUL').children.each.click = functionToExec; 
相關問題