jquery не работает на моей странице asp

#javascript #jquery #.net #asp.net

#javascript #jquery #.net #asp.net

Вопрос:

Я пытался выяснить, что с этим не так в течение последних нескольких минут..

 <%@ Page Title="test" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<%@ PreviousPageType VirtualPath="~/Top.aspx" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
    <style>
        #pagediv { width: 1500px !important; }
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function () {
        $("#ddModel").change(function () {
            var selVal = $(this).find(":selected").text();
            var rows = $("#gvTop tr:gt(0)");
            alert(selVal);
            if (selVal == "ALL") {
                $("#gvTop tr").show();
            }
            else {
                var rowToShow = rows.find("td:eq(3)").filter(":contains("   selVal   ")").closest("tr");
                rows.show().not(rowToShow).hide();
            }
        });
    });
</script>
</asp:Content>
  

Все еще понятия не имею прямо сейчас.

 <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
    <asp:DropDownList ID="ddModel" runat="server" DataSourceID="ddmodelsource" DataTextField="Column1" DataValueField="Column1">
    </asp:DropDownList>
    <asp:GridView ID="gvTop" runat="server" CellPadding="2" CellSpacing="2" GridLines="Vertical">
    </asp:GridView>
</asp:Content>
  

Комментарии:

1. Что такое «не работает»? Загружается ли jquery (проверьте, выполнив оповещение (‘jquery загружен’); в вашем $ (документе). готово (функция… Видите ли вы, что он загружается или какие-либо ошибки JavaScript при тестировании страницы с помощью firebug?

2. Это делает что-то неожиданное или код вообще не выполняется? Работает ли это в минимализированном HTML-прототипе, отличном от ASP?

3. @Raoul @jm_ добавление предупреждения перед $("#ddModel").change(function () { работает. но alert () внутри этой функции не работает. Я неправильно вызываю идентификаторы?

Ответ №1:

Это потому, что на странице содержимого, ASP.NET изменяет назначенный идентификатор на что-то другое. Если вы просмотрите исходный код страницы, вы могли бы это увидеть. Итак, альтернативой является доступ к элементам управления с помощью CssClass .

Например, добавьте CssClass в свой GridView и DropDownList

 <asp:DropDownList ID="ddModel" runat="server" DataSourceID="ddmodelsource" DataTextField="Column1" DataValueField="Column1" CssClass="dropdown">
</asp:DropDownList>

<asp:GridView ID="gvTop" runat="server" CellPadding="2" CellSpacing="2" 
        GridLines="Vertical" CssClass="grid">
    </asp:GridView>
  

Теперь получите к нему доступ из jquery следующим образом.

 $(document).ready(function () {
    $(".dropdown").change(function () {
        var selVal = $(this).find(":selected").text();
        var rows = $(".grid tr:gt(0)");
        alert(selVal);
        if (selVal == "ALL") {
            $(".grid tr").show();
        }
        else {
            var rowToShow = rows.find("td:eq(3)").filter(":contains("   selVal   ")").closest("tr");
            rows.show().not(rowToShow).hide();
        }
    });
});
  

Комментарии:

1. это работает просто отлично, спасибо!! мне просто любопытно, какой смысл использовать # в jquery, если его нельзя использовать таким образом?

2. # в jquery эквивалентно document.getElementById в javascript. проблема в нашем asp.net фреймворк (это портит идентификаторы). вы можете безопасно использовать # в любом элементе управления html без runat =»server». кроме того, jquery широко используется во многих других популярных фреймворках и языках, таких как java, php, ruby….