1

我有一个小 JQuery 脚本,是从一个有外国页面的人那里得到的。

$(function () {
    var $txt = $('input[id$=TextBoxFiltroProv]');
    var $ddl = $('select[id$=DropDownListProv]');
    var $items = $('select[id$=DropDownListProv] option');

    $txt.keyup(function () {
        searchDdl($txt.val());
    });

    function searchDdl(item) {
        $ddl.empty();
        var exp = new RegExp(item, "i");
        var arr = $.grep($items,
                function (n) {
                    return exp.test($(n).text());
                });

        if (arr.length > 0) {
            countItemsFound(arr.length);
            $.each(arr, function () {
                $ddl.append(this);
                $ddl.get(0).selectedIndex = 0;
            }
                );
        }
        else {
            countItemsFound(arr.length);
            $ddl.append("<option>No Items Found</option>");
        }
    }

    function countItemsFound(num) {
        $("#para").empty();
        if ($txt.val().length) {
            $("#para").html(num + " items found");
        }
    }
});

它适用于已经呈现所有内容(HTML 控件)并在更新面板中包含一些元素的页面。但在另一页上,我有 2 个更新面板和一个面板(它开始隐藏)。控件位于 ASP.net PANEL 内。¿ 是控件被隐藏的问题吗?在那种情况下,当面板可见并且它的控件已经呈现时,我如何告诉 JQuery 启动这段代码?我想我错过了一些东西,但我看不到它。谢谢。

4

2 回答 2

1

如果在更新面板中动态添加元素,则必须设置委托以绑定到事件。这样,当动态添加元素时,jquery 将确保按照声明绑定事件。

下面是一个示例,在该示例中,document我想将具有给定选择器input[id$=TextBoxFiltroProv]的任何元素绑定到keyup event现有的onload或者在 is 之后添加到 DOMdocumentready

例子:

$(document).on('keyup', 'input[id$=TextBoxFiltroProv]', function () {
      searchDdl($(this).val());
});
于 2012-08-27T22:34:22.980 回答
0

我已经解决了这个问题,这是因为更新面板,我添加了以下代码,用一个名为 BindEvents 的函数包围了我的主代码,并在更新面板中添加了这个脚本:

 <asp:UpdatePanel...>
<ContentTemplate>
     <script type="text/javascript">
                    Sys.Application.add_load(BindEvents);
     </script>
</ContentTemplate>
    </asp:UpdatePanel>
于 2014-07-07T17:56:58.637 回答