2009-07-06 11 views
0

これはDIV持つ:jQueryのダイアログ+ ASP.NETボタン - 奇妙な行動

<div id="advSearchDialog" style="visibility:hidden;"> 
    <xx:search ID="searchUC" runat="server" /> 
</div> 

、ボタンを:

<input type="button" id="btnAdvSearch" value="Search" /> 

私はボタンがダイアログを開くjQueryのダイアログ、にそれを回します:

$(document).ready(function() { 
    $('#advSearchDialog').dialog({ 
     autoOpen: false, 
     height: 500, 
     width: 600, 
     modal: true, 
     bgiframe: true, 
     title: 'Avanceret søgning', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
     } 
    }); 

    $('#btnAdvSearch').click(function() { 
     $('#advSearchDialog').css('visibility', 'visible'); 
     $('#advSearchDialog').dialog('open'); 
    }); 
}); 

ASP.NETを使用すると問題が発生します。

(更新パネル内の)ASP.NETページの他のボタンを押した後、btnAdvSearchボタンをクリックしても何も起こりません。何故ですか?事前

答えて

3

おかげで、おそらく部分的なページ更新がページ全体を見ずに言うのは難しいあなたのクリックイベントを、削除します。

その問題に対する解決策は、同様の放火犯か気にいらを使用して放射されたHTMLをチェックして、あなたはおそらく、あなたのボタンは、フォームタグ内にもはやであることがわかりませんjqueryのライブイベント http://docs.jquery.com/Events/live

HTH

+1

あなたもpageLoad機能であなたのjQueryのダイアログのコードを置くことができ、これはhttp://www.asp.net/(asp.netアヤックスにより、すべての部分ポストバックで呼び出されますajax/documentation/live/overview/AJAXClientEvents.aspx) –

+0

ライブイベントを使用するのは、このトリックでした。大変ありがとうございました。シンプルで簡単:-) –

0

を使用されるだろうボディータグの最後にあります。あなたに

あなたはダイアログボックス

dialogBox.appendTo($('#FormIdHere')); 

のようなものを使用することができますOKボタンコールバックしている。これは、バックフォームにご希望のボタンを追加する必要がありますので、

var dialogBox = $('#DialogDiv').dialog({ autoOpen: false }); 

として設定された変数です。

編集:ここでは

は、私が最近使用したコードスニペットである(以下のすべてのコードは、オンロード関数内で解雇されたが、reasonPostBackは、オンロード関数の外で宣言しなければなりません)

var button = $('input.rejectButton'); 
reasonPostBack = button.attr('onclick'); 
button.removeAttr('onclick'); 

var dialogBox = $('#ReasonDiv').dialog({ autoOpen: false, title: 'Please enter a reason', modal: true, bgiframe: true, buttons: { "Ok": function() { 

      if ($('input.reasonTextBox').val().length > 0) { 
       $(this).dialog('close'); 
       dialogBox.appendTo($('#theform')); 
       reasonPostBack(); 
      } 
      else 
      { 
        alert('You must enter a reason for rejection'); 
      } 
     } 
    } 
}); 


button.click(function() { 
    dialogBox.dialog('open'); 
    return false; 
}); 

最初のI

var reasonPostBack = button.attr('onclick'); 

での.NETポストバックへの参照を取得し、後で、ボタンからクリックイベントを取り除くためocurringポストバックを停止するためにそれを保持「のauトマト "。次に、ダイアログボックスを作成し、OKボタンの無名関数を追加します。これは、テキストボックスに何かがあるかどうかをテストするコードを実行します。

$(this).dialog('close'); 

が戻ってポスト

dialogBox.appendTo($('#theform')); 

の準備ができて、フォームタグ内にバックのdivを追加しDIVを閉じ、その後、元のポストバック最後に

reasonPostBack(); 

最後に呼び出し、コードのビット

button.click(function() { 
    dialogBox.dialog('open'); 
    return false; 
}); 

は、以前にインスタンス化されたダイアログを開くために、独自のイベントハンドラを.Netボタンに追加します。

HTH

ワンショット