2011-12-19 78 views
0

這是我的對話框代碼:jQuery的對話框:在主窗體上執行.hide()不工作

   "Save": function() { 
        $.validator.unobtrusive.parse("#EventManage"); 

        if ($("#EventManage").valid()) { 

         $.ajax({ 
          url: "/Home/EventSave", 
          type: 'POST', 
          data: $("#EventManage").serialize(), 
          success: function (result) { 
           //alert("s"); 
           $("#EventManage").html(result); 
           $.validator.unobtrusive.parse("#EventManage"); 
           LoadEventList(); 
           alert('x'); 
           $('td.hide').hide(); <<<<< 
           alert('x'); 
           $('#eventlistww').each(function() { 
            var $table = $(this); 
            $('tr', $table).each(function() { 
             var $row = $(this); 
             $('td', $row).each(function() { 
              $('td.hide').hide(); 
             }); 
            }); 
           }); 

          } 
         }); 
        } 
       }, 

我試圖獲得$(「td.hide」) 。隱藏(); < < < < <在主頁面上工作。不知道爲什麼它不起作用,但它似乎工作時,我設置第二個警報('x');之後它被執行。沒有這個警報,它不起作用。

出了什麼問題?

編輯

@ChrisFrancis奇怪不,我註釋掉的第二部分,並再次執行該警報的法寶。有用。沒有警報,它不起作用。

EDIT2

要添加的LoadEventList()看起來是這樣的:

function LoadEventList() { 
     $("#eventlistww").load("/Home/EventDataList"); 
    } 

似乎得到我的回答:

我似乎已經得到了它的工作改爲改變LoadEventList()。

function LoadEventList() { 
     $.get('/Home/EventDataList', function (result) { 
      $('#eventlistww').html(result); 
      $('td.hide').hide(); 
     }); 
    } 

奇怪,但爲什麼這個工程,但.load方法doesnt。

+0

這聽起來好像第一個'$(」 td.hide')。hide()'語句不會工作 - 它只是在第二次提醒後才起作用,因爲你接着再次調用'$('td.hide')。hide()'。 – 2011-12-19 13:37:25

+0

@ChrisFrancis奇怪的是,我評論第二部分,並且再次提醒魔法。有用。沒有警報,它不起作用。 – RicL 2011-12-19 13:50:00

+0

我認爲它必須是一種競爭條件 - 那麼您在第二次提醒時點擊「確定」的時間可能會讓DOM完全呈現,而如果沒有它,您可能還沒有頁面上的元素。正如Dominic在下面指出的那樣,確保在執行任何DOM操作之前使用文檔就緒事件。 – 2011-12-19 14:12:23

回答

1

正如我在評論中提及的工作,它可能是一個競爭條件。文件就緒事件旨在規避這些問題,並且jQuery makes this very simple。只要內包裝所有的示例代碼:

$(document).ready(function() { 
    /* your code here... */ 
}); 

或者使用其他語法變化之一,如文檔中提到的 - 我喜歡:

$(function() { 
    /* your code here... */ 
}); 
1

你的代碼似乎有點過於複雜。

你知道嗎,你可以用它代替迭代每個級別嵌套CSS選擇器

變化(這似乎不是因爲你叫你所有環路td.hide反正做什麼?):

$('#eventlistww').each(function() { 
            var $table = $(this); 
            $('tr', $table).each(function() { 
             var $row = $(this); 
             $('td', $row).each(function() { 
              $('td.hide').hide(); 
             }); 
            }); 
           }); 

$('#eventlistww tr td.hide').hide(); 

並確保真正有一個匹配的元素。一個簡單的方法是使用Firebug等。

+0

同樣的事情,在$('#eventlistww tr td.hide')之前有警報。hide();它會工作,我點擊確定後,該警報。沒有這個警報,沒有任何隱藏! – RicL 2011-12-19 13:49:37

+0

這是一個很好的建議 - 嵌套選擇器更清潔,實際上你的嵌套循環是多餘的,因爲最後一次調用('$('td.hide')。hide();')選擇** ALL ** DOM匹配的元素,不僅僅是'$('td',$ row)'選擇器中的元素... – 2011-12-19 14:17:41

0

您是否正在使用文檔準備好,還檢查您的表格標記,如果它格式不正確,您的命令將無法正常工作。

破碎例如這裏http://jsfiddle.net/DVxSy/72/沒有表標籤
這裏http://jsfiddle.net/DVxSy/71/

+0

表格標記對我來說看起來很好。表格標籤tr和td全部正確顯示 – RicL 2011-12-19 14:09:52