2017-02-02 15 views
0

私はasp.netドロップダウンリストの項目を検索するためにテキストボックスにJavascriptを使用しました。それは動作しますが、問題は、項目が見つかったときにドロップダウンに表示され、クリックした後にSelectedIndexchangeが発生しないということです。どうして ?ドロップダウン・ファイア・インデックスが変更されたのはなぜですか?

多くのアイテムの中からアイテムを選択すると起動しますが、単一のアイテムが表示されたときには起動しません。

コード:

<script type="text/javascript"> 
     var ddlText, ddlValue, ddl, lblMesg; 
     function CacheItems() { 
      ddlText = new Array(); 
      ddlValue = new Array(); 
      ddl = document.getElementById("<%=ddlEmployers.ClientID %>"); 
      //lblMesg = document.getElementById("<%=lblMsg.ClientID%>"); 
      for (var i = 0; i < ddl.options.length; i++) { 
       ddlText[ddlText.length] = ddl.options[i].text; 
       ddlValue[ddlValue.length] = ddl.options[i].value; 
      } 
     } 
     window.onload = CacheItems; 

     function FilterItems(value) { 
      ddl.options.length = 0; 
      for (var i = 0; i < ddlText.length; i++) { 
       if (ddlText[i].toLowerCase().indexOf(value) != -1) { 
        AddItem(ddlText[i], ddlValue[i]); 
       } 
      } 
      lblMesg.innerHTML = ddl.options.length + " items found."; 
      if (ddl.options.length == 0) { 
       AddItem("No items found.", ""); 
      } 
     } 

     function AddItem(text, value) { 
      var opt = document.createElement("option"); 
      opt.text = text; 
      opt.value = value; 
      ddl.options.add(opt); 
     } 
    </script> 

コントロール:

<div class="col-md-6"> 
           <div class="form-group"> 
            <%--<label for="exampleInputEmail1">Employers</label>--%> 
            <asp:TextBox ID="txtSearch" CssClass="col-md-12" runat="server" placeholder="Search employer" 
             onkeyup="FilterItems(this.value)"></asp:TextBox><br /> 
            <asp:DropDownList ID="ddlEmployers" AutoPostBack="true" OnSelectedIndexChanged="ddlEmployers_SelectedIndexChanged" runat="server" CssClass="form-control"></asp:DropDownList> 
            <br /> 
            <asp:Label ID="lblMsg" runat="server" Text=""></asp:Label> 
           </div> 
          </div> 

のSelectedIndexChangedコード:

protected void ddlEmployers_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     try 
     { 
      ClsEmployee ClsEmployee = new MemberShip.Repository.ClsEmployee(); 

      if(ddlEmployers.SelectedValue.ToInt32() <= 0) 
      { 
       ddlBranches.SelectedValue = "0"; 
      } 
      else 
      { 
       ddlBranches.SelectedValue = ClsEmployeer.GetBranchByEmployerID(ddlEmployers.SelectedValue.ToInt32()) > 0 ? ClsEmployeer.GetBranchByEmployerID(ddlEmployers.SelectedValue.ToInt32()).ToString() : "0"; 

      } 

     } 
     catch (Exception ex) 
     { 

      ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert(" + ex.Message + ");", true); 
     } 
    } 

答えて

0

すでにフィルタリングの後に設定1つのオプションがある場合には、インデックスに変更はありません。あなたがそれをクリックすると、それはのOnSelectedIndexChangedを満たしません。

あなたは私の上記のステートメントを確認するために、以下のようにコードを編集することができ

 function AddItem(text, value) { 
      var opt = document.createElement("option"); 
      opt.text = text; 
      opt.value = value; 
      ddl.options.add(opt); 
      ddl.value = ""; 
     } 

しかし、これを行うには、フィルタリングにドロップダウンリストをクリアします。このことができます

それとも、内部FilterItems機能以下のようにデフォルトのオプションを持つことができ、

function FilterItems(value) { 
      ddl.options.length = 0; 
      AddItem("--Please Select--", -1); 
      for (var i = 0; i < ddlText.length; i++) { 
       if (ddlText[i].toLowerCase().indexOf(value) != -1) { 
        AddItem(ddlText[i], ddlValue[i]); 
       } 
      } 
      lblMesg.innerHTML = ddl.options.length + " items found."; 
      if (ddl.options.length == 0) { 
       AddItem("No items found.", ""); 
      } 
     } 

願っています!

関連する問題