#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….