未启用UpdatePanel和JQuery的列表框选择事件

时间:2013-01-08 02:17:06

标签: asp.net vb.net jquery updatepanel

我有一个存储了一些项目的列表框 从文本框的键盘事件我选择我的选择

我面临的问题是 一旦我选择了我的选择Listbox1_selectIndexchanged事件(它将我的选择设置为另一个文本框)没有正确触发,它只在我点击某个按钮或某些页面回发事件时触发......

[我使用过JQuery和updatepanel]

这是我的代码

    <%@ Page Language="vb" AutoEventWireup="false" MasterPageFile="~/Main.Master"             CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication2.WebForm1" 
title="Untitled Page" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"  runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="uppnl" runat="server">
        <ContentTemplate>
        <script type="text/javascript" >
            var prm = Sys.WebForms.PageRequestManager.getInstance();

            prm.add_endRequest(function() {
            $('select[id$=ListBox1]').filterByText($('input[id$=TextBox1]'), true);
            });
            </script>
    <asp:Panel ID="Panel1" runat="server" Style="border-right: thin groove; border-top: thin groove; border-left: thin groove; border-bottom: thin groove; vertical-align: middle; width: 100%; text-align: center; padding-right: 5px; padding-left: 5px; padding-bottom: 5px; padding-top: 5px;">

    <br />

            <asp:Label ID="Label1" runat="server" Text="Type"></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Label ID="Label2" runat="server" Text="SelectedText"></asp:Label>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>


    &nbsp;<asp:ListBox ID="ListBox1" runat="server" Height="119px" Width="126px">
        <asp:ListItem Text="Apple" Value="1"></asp:ListItem>
        <asp:ListItem Text="Orange" Value="2"></asp:ListItem>
        <asp:ListItem Text="Peache" Value="3"></asp:ListItem>
        <asp:ListItem Text="Banana" Value="4"></asp:ListItem>
        <asp:ListItem Text="Melon" Value="5"></asp:ListItem>
        <asp:ListItem Text="Lemon" Value="6"></asp:ListItem>
        <asp:ListItem Text="Pineapple" Value="7"></asp:ListItem>
        <asp:ListItem Text="Pomegranate" Value="8"></asp:ListItem>
        <asp:ListItem Text="Mulberry" Value="9"></asp:ListItem>
        <asp:ListItem Text="Apricot" Value="10"></asp:ListItem>
        <asp:ListItem Text="Cherry" Value="11"></asp:ListItem>
        <asp:ListItem Text="Blackberry" Value="12"></asp:ListItem>
    </asp:ListBox>
    <asp:Button ID="Button1" runat="server" Text="Refresh" />
    <br />
    </asp:Panel>
    </ContentTemplate>
    </asp:UpdatePanel>

    <script type="text/javascript">
         jQuery.fn.filterByText = function(textbox, selectSingleMatch) {
        return this.each(function() {
            var select = this;
            var options = [];
            $(select).find('option').each(function() {
                options.push({value: $(this).val(), text: $(this).text()});
            });
            $(select).data('options', options);
            $(textbox).bind('change keyup', function() {
                var options = $(select).empty().data('options');
                var search = $.trim($(this).val());
                var regex = new RegExp(search,"gi");

                $.each(options, function(i) {
                    var option = options[i];
                    if(option.text.match(regex) !== null) {
                        $(select).append(
                           $('<option>').text(option.text).val(option.value)
                        );
                    }
                });
                if (selectSingleMatch === true && $(select).children().length === 1) {
                    $(select).children().get(0).selected = true;
                }
            });            
        });
    };

    $(function() {
         $('select[id$=ListBox1]').filterByText($('input[id$=TextBox1]'), true); 
    });

    </script>

    </asp:Content>

在我的代码后面我有

    Protected Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ListBox1.SelectedIndexChanged
    TextBox2.Text = ListBox1.SelectedItem.ToString()
    End Sub

1 个答案:

答案 0 :(得分:0)

你的事件确实发生了。

在Page_Load方法中加载控件属性,您的事件将在Page_Load方法之后触发,因此您的页面将不会反映其结果。根据页面生命周期,所有事件都将在Page_Load方法之后触发。

试试这个:

Protected Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ListBox1.SelectedIndexChanged
    TextBox2.Text = ListBox1.SelectedItem.ToString()
    Page_Load(sender, e)
End Sub

要详细了解页面生命周期,请查看http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx

修改

您还需要将列表框绑定到您的活动:

<asp:ListBox ID="ListBox1" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" runat="server">