|
在工作中遇到如下问题: Gridview中有一文本框,一按钮,要求点击按钮弹出一网页对话框,在对话框关闭的时候,将返回值填充到相应行的文本框中去,找了很多资料,问题终于得以解决。 预备知识: 一 、如何弹出网页对话框,并返回值 语法:vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
1.假设sURL 是jump.aspx,在弹出的窗口jump.aspx的html代码中可以用window.returnValue返回值给当
前窗口。
2.vArguments是当前窗口传给弹出窗口的变量,假如要把当前窗口的一个textbox里的值传给弹出窗口
jump.aspx可以这样:
<script language=javascript>
var strSendValue=objForm.sendValue.value;
window.showModalDialog(jump.aspx,strSendValue,"dialogHeight:300px;
dialogLeft:200px;");
</script>
<form id="objForm">
<input type="text" id="sendValue" value="Jane"> ......
</form>
在jump.aspx页面的html代码中这样接受传来的值:
<script language=javascript>
var strReceiveValue=window.dialogArguments;
......
</script>
vArguments可以是一个textbox,label……里的值,也可以是一个变量,甚至可以是一个对象,比如窗口
的句柄等,如:
window.showModalDialog(jump.aspx,window,"dialogHeight:300px; dialogLeft:200px;");
即把当前窗口的句柄(指针)传给了jump.aspx,然后,可以在jump.aspx的script里访问其父窗口的里的
内容:
var objParentForm=window.dialogArguments;
var strValue=objParentForm.objForm.sendValue.value;
对于有Tab控件的页面来说,这个功能可以帮助弹出窗口找到其父窗口。因为在有Tab控件的Form里弹
出窗口用parent属性只能导航到Tab所在的页面,而不能获得Tab选项卡里的子页面的句柄,用上述方法可
以把Tab选项卡里的子页面的句柄直接传给弹出窗口,就可以访问其父窗口了!
二、如何在 JAVASCRIPT中查找 内容页中的控件
可以采取表达式: <%= 控件Id.ClientID%>
例如 : var txt=document.getElementById("<%= txt.ClientID %>");
三、如何在JAVASCRIPT中控制GridView中的控件
GridView控件在浏览器上的解析结果实际上是 table,因此就可以像操作 table那样操作GridView
以下做了一些简单的测试
<%@ Page Language="C#" MasterPageFile="~/Qtemp/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Qtemp_Default2" Title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <script language="javascript" type="text/javascript"> function change() { var txt=document.getElementById("<%= txt.ClientID %>"); txt.value="jvajva"; } document.write("<%=gv.ClientID %>"); function tst() { var grid=document.getElementById("<%=gv.ClientID %>"); for(var i=0;i<grid.rows.length;i++) { var txts=grid.rows[i].getElementsByTagName("input"); for(var j=0;j<txts.length;j++) { if(txts[j].type=="text" && txts[j].id.indexOf("txt")>-1) { txts[j].value=i; } } } } function getRowValue(chk) { var tblRow = chk.parentNode.parentNode; return tblRow.cells[1].innerHTML + ", " + tblRow.cells[2].innerHTML; } function selectValue(link) { var tmp=window.showModalDialog("dialog.aspx","","dialogHeight:100px;dialogWidth:200px;center=yes;help=no;status=no"); var tblRow=link.parentNode; //alert(tblRow); var txts=tblRow.getElementsByTagName("input"); for(var j=0;j<txts.length;j++) { if(txts[j].type=="text" && txts[j].id.indexOf("txt")>-1) { txts[j].value=tmp; } } } </script> <asp:TextBox ID="txt" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" OnClientClick="change()" Text="Button" /> <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1"> <Columns> <asp:BoundField DataField="CityName" HeaderText="CityName" SortExpression="CityName" /> <asp:BoundField DataField="CityDescription" HeaderText="CityDescription" SortExpression="CityDescription" /> <asp:BoundField DataField="CityId" HeaderText="CityId" SortExpression="CityId" /> <asp:TemplateField HeaderText="te"> <ItemTemplate> <asp:TextBox ID="txt" runat="server" Width="120px"></asp:TextBox> <a href="#" id="link" onclick="selectValue(this)">选择</a> <input id="chk" type="checkbox" onclick="if(this.checked) alert(getRowValue(this))" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllCities" TypeName="BusinessLayer.CityManager"></asp:ObjectDataSource> <input id="Button2" type="button" value="button" onclick="tst()"/><br /> <br />
</asp:Content>
|