2011-12-19 9 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」)を取得しようとしています。隠す(); < < < < <がメインページで動作します。それがうまくいかない理由はわかりませんが、その2番目のアラート( 'x')を設定すると動作するように見えます。その後、それが実行されます。その警告がなければ、動作しません。

何が問題になりましたか?

EDIT

@ChrisFrancis妙いや、私は第二の部分をコメントアウトし、再びそのアラート魔法を行います。できます。警告なしでは、動作しません。

EDIT2

(、LoadEventListを追加する)次のようになります。

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

は私の答えを得るために見えた:

私はそれがで作業してしまっているように見えました代わりにLoadEventList()を変更します。

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

これはなぜ機能するのですか。ただし、.loadメソッドはそれほど役に立ちません。

+0

それは最初の '$(ように私に聞こえますtd.hide ')。'$( 'td.hide')。hide()'をもう一度呼び出すと、2番目の警告の後で動作するように見えます。 –

+0

@ChrisFrancis奇妙なことに、私は第2部をコメントアウトし、そのアラートの魔法をやり直します。できます。警告なしでは、動作しません。 – RicL

+0

2番目のアラートで「OK」をクリックするとDOMが完全にレンダリングされる可能性がありますが、それがなければまだページに要素がない可能性があります。 Dominicが以下に指摘しているように、DOM操作を実行する前にドキュメント準備完了イベントを使用していることを確認してください。 –

答えて

1

作業ここhttp://jsfiddle.net/DVxSy/72/なしテーブルタグ
、それは競合状態である可能性があります。文書準備完了イベントは、これらの問題を回避するように設計されており、jQuery makes this very simpleです。単に内部のあなたの例のコードのすべてのラップ:

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

やドキュメントに述べたように、他の構文上のバリエーションのいずれかを使用する - 私が好む:

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

あなたのコードはちょっと複雑すぎるようです。 (?あなたはとにかくループ内のすべてのtd.hideを呼び出すので、何もしていないようです)

は、あなたがあなたの代わりに反復処理の各レベルのネストされたCSS-セレクタを使用することができます知っていました

変更:

$('#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();そのアラートで[OK]をクリックすると動作します。その警告なしで、何も隠されていない! – RicL

+0

最後の呼び出し( '$( 'td.hide')。hide();')が** ALL ** DOMを選択しているため、ネストされたセレクターはよりクリーンで、 '$( 'td'、$ row)'セレクタ内のものだけでなく、一致する要素... –

0

ドキュメントの準備ができていて、あなたのコマンドが正しく動作しない場合は、テーブルマークアップもチェックしてください。

壊れた例私のコメントで述べたように、ここでhttp://jsfiddle.net/DVxSy/71/

+0

テーブルのマークアップは私にとってはうまく見えます。テーブルタグtrとtdはすべて正しく表示されます – RicL

関連する問題