2013-10-25 370 views
1

我正在使用時間表應用程序,我在隱藏/取消隱藏使用不同瀏覽器的面板時遇到了一些問題。查看屏幕截圖。切換不能使用新的瀏覽器

圖片1:這是我正在做的一般開始頁面。點擊按鈕。

圖片2:這是預期的輸出。這是我在IE8中獲得的輸出。

圖片3:這是最新的Chrome的輸出。該面板顯示(不正確,注意它不跨過桌子,它只有一列寬),並且再次隱藏。我在最新的Firefox和IE中獲得了相同的結果。

This is the general start page for what I'm doing. Click on the button. This is the expected output. It's the output I get in IE8. This is the output for the latest Chrome. The panel is shown (improperly) for a split second and hidden again. I get the same result in the latest Firefox.

這是JavaScript的切換。

function toggleVisibility(panel) 
{ 
    if (panel.style.display == "none") 
    { 
     panel.style.display = ""; 
    } 
    else 
    { 
     panel.style.display = "none"; 
    } 
} 

這是調用肘

 TableCell showCell = new TableCell(); 
     HtmlButton showButton = new HtmlButton(); 
     showButton.Attributes.Add("onClick", "toggleVisibility(panel" + timesheet.timesheetId.ToString() + ")"); 
     showCell.Controls.Add(showButton); 

     TableCell nameCell = new TableCell(); 
     HyperLink nameLink = new HyperLink(); 
     nameLink.NavigateUrl = "./timesheet.aspx?timesheetId=" + timesheet.timesheetId.ToString()+ "&empNum=" + timesheet.employeeId + "&PopUp=" + _approverEmployeeId; 
     nameLink.Text = employeeName; 
     nameLink.Target = "_blank"; 
     nameCell.Controls.Add(nameLink); 

在aspx.cs文件再往下是面板被定義,其中aspx.cs。

 TableRow childRow = new TableRow(); 
     TableCell childCell = new TableCell(); 
     childCell.ColumnSpan = headerRow.Cells.Count; 
     childCell.Controls.Add(childTable); 
     childRow.Controls.Add(childCell); 
     childRow.Attributes.Add("Style", "Display: none"); 
     childRow.ID = "panel" + timesheet.timesheetId; 

     summaryTable.Rows.Add(headerRow); 
     summaryTable.Rows.Add(childRow); 

當我刪除childRow.Attributes.Add( 「樣式」, 「顯示:無」),該表中所有的瀏覽器正確地顯示。點擊綁定的按鈕即可隱藏,然後在較新的瀏覽器中顯示錶格。

這是HTML的一個片段。整個頁面的HTML可以在這裏找到http://asalim.net/approval.txt

<table id="summaryTable" rules="all" bordercolor="Silver" border="1" style="border-color:Silver;border-style:None;height:32px;width:768px;Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 136px"> 
    <tr> 
     <td>Show Detail</td> 
     <td>Name</td> 
     <td>EmployeeNumber</td> 
     <td>Approved</td> 
     <td>Reject</td> 
    </tr> 
    <tr id="summary94458" style="border-color:Black;border-width:1px;border-style:Solid;"> 
     <td><button onClick="toggleVisibility(panel94458)"></button></td> 
     <td><a href="./timesheet.aspx?timesheetId=94458&amp;empNum=051006&amp;PopUp=051006" target="_blank">XXXXXXXXXXXXXXXXXXXXXXX</a></td> 
     <td>051006</td> 
     <td><input id="allApproved94458" type="checkbox" name="allApproved94458" onclick="approveLines(this, 94458);" /></td> 
     <td><input type="submit" name="reject94458" value="Reject" onclick="window.open('./reject.aspx?empNum=051006&amp;timesheetId=94458');" language="javascript" id="reject94458" /></td> 
    </tr> 
    <tr id="panel94458" style="Display: none"> 
     <td colspan="5"><table id="detailTable94458" bordercolor="Black" border="0" style="border-color:Black;border-width:1px;border-style:Solid;width:100%;"> 
      <tr> 
       <td>Description</td> 
       <td>Job</td> 
       <td>Extra</td> 
       <td>Cost Code</td> 
       <td>Reg Hours</td> 
       <td>OT Hours</td> 
       <td>Mileage</td> 
       <td>Approved</td> 
      </tr> 
+0

你可以發佈一些*最小的HTML顯示問題? * toggleVisibilty *函數看起來很好。也許先測試「無」,例如'panel.style.display = panel.style.display =='none'? 'block':'none';' – RobG

+0

上面更新的代碼。 –

回答

2
  1. 正如我已經爲顯示問題提到的,當你想要的元素是可見的,而不是「」
  2. 對於消失的問題,你的按鈕導致您的形式是用「錶行」提交。有兩個簡單的解決方法選項

    • 更改你的元素,以一個不相關的動作,如跨度: <span onClick="toggleVisibility(panel94458)">View</span>

    • 防止通過JavaScript默認的按鈕動作: <button onClick="toggleVisibility(panel94458); return false;">View</button>

+0

另外值得注意的是,「消失」的問題實際上是發送了很多表單提交給你的服務器,所以你可能想看看,看看是否沒有錯誤的數據以這種方式保存 –

+0

你提到的span選項是我怎麼做事情,並且可能會將問題分類。 –

+0

我做了第二個選項返回false,並做了訣竅。感謝法比奧。 –

2

更新如下:

<button onClick="toggleVisibility(panel94458)"></button> 

<button onClick="javascript:toggleVisibility(panel94458);" type="button"></button> 

作爲每http://www.w3schools.com/tags/tag_button.asp

提示:始終指定一個元素的類型的屬性。 不同的瀏覽器對 元素使用不同的默認類型。

+0

上面更新的代碼。 –

-1

toggleVisibility,嘗試用panel.style.display = "table-cell";

參考替換panel.style.display = "";https://developer.mozilla.org/en-US/docs/Web/CSS/display

+0

不行。奇怪的是,它在Chrome中顯示一秒鐘,然後消失。該頁面似乎也重新加載。 –

+0

對不起,從圖像中我認爲「面板」是指一個表格單元格,但更多地查看您的代碼,它似乎是指該行。所以用'「table-row」'代替。無論哪種方式,您可以發佈一個生成的HTML代碼樣本,而不是服務器端源代碼。 –

+0

表格行解決了問題,現在彙總表在Chrome中完全跨越,就像它在IE中一樣。不過,我仍然可以自動切換可視性。完整的HTML可以在這裏找到 - http://asalim.net/approval.txt –

-1

嘗試使用 '===' 而不是 '==',如下所示: -

功能toggleVisibility( (panel.style.display ===「none」) { panel.style.display =「」; } else { panel.style。display =「none」; } }

這是一個傳單,但這已經讓我感到困惑。我也會認爲將其設置爲空白,即'panel.style.display =「」;'會導致問題。當然應該是'封鎖'?

+0

試過這兩個選項,===和塊,仍然沒有去。我將在一分鐘後發佈Fabio要求的HTML。 –

3

您應該添加type =「button」。適用於最新的Chrome:http://test.dogaev.pp.ua/請告知我何時可以從我的服務器上刪除此頁面

+0

問題已解決Gennady。您可以刪除代碼。謝謝。 –

0

您是否使用ASP.NET Web窗體?哪個版本?

如果是這樣,它在現代瀏覽器中可能不起作用的一個原因是,ASP.NET不能正確識別瀏覽器,並且默認爲低級響應javascript和HTML。

(您可以通過保存在不同的瀏覽器頁面的源代碼,並進行比較,以確認。)

爲了幫助解決這個問題,你需要更新的瀏覽器及其功能的ASP.NET知識。希望這個鏈接可以幫助你排序:http://aspnet.codeplex.com/releases/view/41420

確保你使用的是更新版本的ASP.NET,也可以讓它爲你工作。

相關問題