這種情況聽起來很複雜,但並不是那麼糟糕。這段代碼末尾的javascript 好像是。爲什麼在Postback之後複製innerHTML時插入了逗號?
編輯:這是運行在活動服務器上的頁面。第一個例子並沒有在開放和關閉之間交替,因爲我剔除了大量代碼,以便儘可能縮小范例的範圍。
http://69.64.80.239/tmp/borked2.aspx
有下面的客戶端代碼中列出兩種情況。第一種情況是當單擊圖像按鈕時發回,並且使用imagebutton的clientid作爲參數來添加對大javascript函數的調用。
第二種情況簡單地使用onClientClick,並且執行javascript而沒有回發。
這兩種方法都可以完成顯示和隱藏應該出現的文本框。但是,使用回發方法,每次來回時插入逗號 - 先是1,然後是3,然後是7,然後是15,然後是31.這種奇怪的行爲不會發生在案例#2中,這讓我相信這種情況下的javascript是健全的。
當回發發生時,'value =「,」'屬性出現在我的文本框中,之前沒有。越來越多的逗號適合新添加的屬性。
爲了有效地突出顯示問題,這種情況非常嚴重。最終,這導致detailsview我執行相同的副本上添加逗號,以提交每個表單值的開頭。
我完全難住了,所以我只是要發佈代碼以及我可以!任何想法,將不勝感激!
<h5>CASE 1: Using Serverside postback to insert Javascript into a Literal</h5>
<table><tr><td>
<asp:ImageButton id="CollapseExpand" runat="server" ImageUrl="/images/plus.gif" src="/images/plus.gif"
AlternateText="Hide Tasks" Width="12" Height="12" onclick="CollapseExpand_Click"
/>
<div style="display:none">
<asp:TextBox runat="server" ID="Textbox1"></asp:TextBox>
<asp:Button runat="server" ID="btnSubmit1" Text="Submit 1" />
</div>
<asp:Literal runat="server" ID="ScriptAnchorTest"></asp:Literal>
</td></tr></table>
CASE 1代碼隱藏
protected void CollapseExpand_Click(object sender, ImageClickEventArgs e)
{
Literal l = (Literal)this.ScriptAnchorTest;
l.Text = "<script type=\"text/javascript\">Expand(document.getElementById('" + this.CollapseExpand.ClientID + "'));</script>";
}
CASE 2:執行JavaScript客戶機側直接
<asp:ImageButton id="CollapseExpand2" runat="server" src="/images/plus.gif"
AlternateText="Hide Tasks" Width="12" Height="12" onClientClick="Expand(this); return false;"
/>
<div style="display:none">
<asp:TextBox runat="server" ID="TextBox2"></asp:TextBox>
<asp:Button runat="server" ID="btnSubmit2" Text="Submit 2" />
</div>
</td></tr></table>
// Javascript函數 函數展開(圖像,索引){ //獲取圖像的源代碼 var src = image.getAttribute(「src」);
// if src is currently "plus.", then toggle it to "minus.png"
if (src.indexOf("plus") > 0) {
// toggle the image
image.src = image.src.replace("plus", "minus");
var tr = image.parentNode.parentNode;
// Get a reference to the next row from where the image is
var next_tr = tr.nextSibling;
// Get a refernece to the <tbody> tag of the grid
var tbody = tr.parentNode;
// Get a reference to the image's column
var td = image.parentNode;
var detailnode
//loop through the content of the image's column. if hidden div is found, get a reference
for (var j = 0; j < td.childNodes.length; j++) {
if (td.childNodes[j].nodeType == 1) {
if (td.childNodes[j].nodeName.toLowerCase() == 'div') {
detailnode = td.childNodes[j].cloneNode(true);
}
}
}
// Create a new table row for "Expand"
var newtr = document.createElement('tr');
var newtd = document.createElement('td');
var newfirsttd = newtd.cloneNode(true);
/* insert an empty cell first */
newtr.appendChild(newfirsttd);
newtd.colSpan = 8;
// insert the hidden div's content into the new row
newtd.innerHTML = detailnode.innerHTML;
newtr.appendChild(newtd);
tbody.insertBefore(newtr, next_tr);
tr.className = "selected";
}
else {
image.src = src.replace("minus", "plus");
var row = image.parentNode.parentNode;
var rowsibling = row.nextSibling;
var rowparent = row.parentNode;
rowparent.removeChild(rowsibling);
}
是否有可能將網站或網頁放在網頁上,我們可以在網頁上看到它的實際使用情況。很難全面瞭解你想從郵件中完成的任務。 – 2008-12-05 05:15:14
已張貼頁面。請參閱我編輯的鏈接。 – 2008-12-05 06:12:29