【问题标题】:Jquery script does nothing on one page but on anotherJquery 脚本在一个页面上什么都不做,但在另一个页面上
【发布时间】:2012-08-22 10:40:50
【问题描述】:

我有一个小 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 启动这段代码?我想我错过了一些东西,但我看不到它。谢谢。

【问题讨论】:

  • 是的,隐藏元素(例如display:none;)不会通过选择器(例如document.getElementById)返回。
  • 一个隐藏的 ASP 面板,其中没有可供选择的 html。如果将代码放在以下函数中,它将在页面重新加载时运行,其中包含新的更新面板:jQuery(document).ready(function () { .... });
  • 你有一些基本的 html 来展示这个吗?
  • 它基本上是 CONTROLS HERE

标签: jquery asp.net web webpage


【解决方案1】:

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

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

例子:

$(document).on('keyup', 'input[id$=TextBoxFiltroProv]', function () {
      searchDdl($(this).val());
});

【讨论】:

  • 非常感谢您在某些情况下的回答。
【解决方案2】:

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

 <asp:UpdatePanel...>
<ContentTemplate>
     <script type="text/javascript">
                    Sys.Application.add_load(BindEvents);
     </script>
</ContentTemplate>
    </asp:UpdatePanel>

【讨论】:

    猜你喜欢
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多