将autoComplete添加到下拉列表后,OnSelectedIndexChanged事件停止触发。有什么想法吗?

时间:2013-03-05 15:00:10

标签: jquery asp.net vb.net

我们有一个ID为NewEmpName的下拉列表控件。此下拉列表将使用员工用户名从数据库中自动填充。此应用的用户使用它来发出请求。

当用户登录此系统时,他或她的名字以及其他相关信息将根据用户的登录名自动填充到多个文本框中。

如果登录系统的用户正在请求其他员工,则该用户选择代表其发出请求的员工姓名。

通过从NewEmpName下拉列表中选择员工姓名,包含已登录用户记录的文本框将替换为属于刚从下拉列表中选择的员工的信息。

使用OnSelectedIndexChanged事件

可以实现这一点
Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    empname.Text = CType(sender, DropDownList).SelectedValue

在我被要求添加自动完成功能之前,一切都运行良好,因此用户可以输入几个字符,并从下拉列表中选择员工的姓名。

添加此自动完成功能后,OnSelectedIndexChanged事件不再触发。

有什么想法吗?

这是下拉列表代码隐藏:

Public Sub FillUsers()
    Dim cmd As New SqlCommand("Select SAMAccountName from ActiveDirectory order by SAMAccountName ASC", New SqlConnection(ConfigurationManager.ConnectionStrings("constr").ConnectionString))
    cmd.Connection.Open()

    Dim ddlValues As SqlDataReader
    ddlValues = cmd.ExecuteReader()

    newEmpname.DataSource = ddlValues
    newEmpname.DataValueField = "SAMAccountName"
    newEmpname.DataTextField = "SAMAccountName"
    newEmpname.DataBind()
    Me.newEmpname.Items.Insert(0, "newEmpname")

    cmd.Connection.Close()
    cmd.Connection.Dispose()
End Sub

与下拉列表代码集成的AutoComplete代码的一部分:

Class Item
    Private _val As String
    Private _id As String

    Public Property sAMAccountName() As String
        Get
            Return _val
        End Get
        Set(ByVal value As String)
            _val = value
        End Set
    End Property
End Class

如果需要,我可以发布js代码,但代码很长。

这是js和标记:

<link type="text/css" rel="Stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/themes/redmond/jquery-ui.css" />
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.js"></script>  
     <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.js"></script>
<meta charset="utf-8">

       <style type="text/css">
       .ui-button { margin-left: -1px; }
       .ui-button-icon-only .ui-button-text { padding: 0.35em; } 
       .ui-autocomplete-input { margin: 0; padding: 0.48em 0 0.47em 0.45em; }
       </style>

       <script type="text/javascript">


           function optionSelected(selectedValue) {
               document.title = selectedValue;
           }

           (function ($) {
               $.widget("ui.combobox", {
                   _create: function () {
                       var self = this,
                                  select = this.element.hide(),
                                  selected = select.children(":selected"),
                                  value = selected.val() ? selected.text() : "";
                       var input = this.input = $("<input>")
                                  .insertAfter(select)
                                  .val(value)
                                  .autocomplete({
                                      delay: 0,
                                      minLength: 0,
                                      source: function (request, response) {
                                          var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                                          response(select.children("option").map(function () {
                                              var text = $(this).text();
                                              if (this.value && (!request.term || matcher.test(text)))
                                                  return {
                                                      label: text.replace(
                                                                           new RegExp(
                                                                                  "(?![^&;]+;)(?!<[^<>]*)(" +
                                                                                  $.ui.autocomplete.escapeRegex(request.term) +
                                                                                  ")(?![^<>]*>)(?![^&;]+;)", "gi"
                                                                           ), "<strong>$1</strong>"),
                                                      value: text,
                                                      option: this
                                                  };
                                          }));
                                      },
                                      select: function (event, ui) {
                                          ui.item.option.selected = true;
                                          self._trigger("selected", event, {
                                              item: ui.item.option
                                          });
                                          //JK
                                          optionSelected(ui.item.option.value);

                                      },
                                      change: function (event, ui) {
                                          if (!ui.item) {
                                              var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
                                                              valid = false;
                                              select.children("option").each(function () {
                                                  if ($(this).text().match(matcher)) {
                                                      this.selected = valid = true;
                                                      return false;
                                                  }
                                              });
                                              if (!valid) {
                                                  // remove invalid value, as it didn't match anything
                                                  $(this).val("");
                                                  select.val("");
                                                  input.data("autocomplete").term = "";
                                                  return false;
                                              }
                                          }
                                      }
                                  })
                                  .addClass("ui-widget ui-widget-content ui-corner-left");

                       input.data("autocomplete")._renderItem = function (ul, item) {
                           return $("<li></li>")
                                         .data("item.autocomplete", item)
                                         .append("<a>" + item.label + "</a>")
                                          .appendTo(ul);
                       };

                       this.button = $("<button type='button'>&nbsp;</button>")
                                  .attr("tabIndex", -1)
                                  .attr("title", "Show All Items")
                                  .insertAfter(input)
                                  .button({
                                      icons: {
                                          primary: "ui-icon-triangle-1-s"
                                      },
                                      text: false
                                  })
                                  .removeClass("ui-corner-all")
                                  .addClass("ui-corner-right ui-button-icon")
                                  .click(function () {
                                      // close if already visible
                                      if (input.autocomplete("widget").is(":visible")) {
                                          input.autocomplete("close");
                                          return;
                                      }

                                      // pass empty string as value to search for, displaying all results
                                      input.autocomplete("search", "");
                                      input.focus();
                                  });
                   },

                   destroy: function () {
                       this.input.remove();
                       this.button.remove();
                       this.element.show();
                       $.Widget.prototype.destroy.call(this);
                   }
               });
           })(jQuery);

           $(function () {
               $("#<%= newEmpName.ClientID%>").combobox();
               $("#toggle").click(function () {
                   $("#<%= newEmpName.ClientID%>").toggle();
               });
           });
    </script>




**Markup:**

  <asp:DropDownList ID="newEmpName" OnSelectedIndexChanged="ddl_SelectedIndexChanged" runat="server" CssClass="style26" AutoPostBack="True" />

1 个答案:

答案 0 :(得分:0)

使用自动完成功能,所选索引不再更改,它始终是第一个,自动完成可能的替代项列表正在更改,但所选项目的索引不会更改,它始终为0.尝试可能与一些基于内容的触发器。