2012-10-18 12 views
13

編集:なぜjQuery UIダイアログから送信ボタンをトリガーできないのですか?

フォームに直接送信することを提案している人もいます。これは私が達成しようとしていることではありません。具体的には、入力タイプ= 'submit'でclick()イベントを呼び出し、通常と同じようにフォームを送信するようにしたいと思います。 jQuery UIダイアログがこの通常の動作を妨害しているように見えます。問題が再現可能なので、私が作成したjsFiddleリンクを確認してください。


(まず第一に、私はすでにStackOverflowの上でこの質問を見てきましたが、答えは私の状況では動作しません:jQuery UI Dialog with ASP.NET button postback

望ましい行動:私は両方を持っている私のページで

隠しフィールドと送信ボタン(CSSを介して隠されています)。

JavaScriptを使用してこのボタンをクリックすると、フォームが送信されます。最も重要なことは....私はjQuery UIダイアログの内側からこれをすべてトリガーしたいと思っています。基本的に、ユーザーはjQuery UIダイアログ内で選択して、ページ全体を送信してリロードします。

問題文

このようなボタンのクリックは、通常、フォームを送信するために正常に動作トリガ。ただし、アクションがjQuery UIダイアログ内でトリガーされると失敗します。

私のjsFiddleコードに見られるように、私はsubmitボタンのjQueryのclick()関数を呼び出します....しかし、フォームは実際には送信されません!ボタンは実際にはJavaScriptによってクリックされていますが、「フォーム送信動作」自体は発生しません。ページは投稿されていません。

jQuery UIダイアログが、プログラムでクリックしようとしているボタンのフォーム送信動作を妨害していると思います。

私はプログラムでボタンのクリックをトリガーにしたい理由:

私は内部ダイアログにあるボタンは、ボタン自体を提出することはできません。私の場合、jQuery UIダイアログをラップする、再利用可能なJavaScriptコントロールを作成しました。このJSコントロールにより、ユーザーは従業員を選ぶことができます。ただし、従業員が選出された場合、希望の動作はであり、常にになるとは限りません。

この問題はASP.NETに固有のものではないが、ここではいくつかの追加の詳細は、以下のとおりです。

追加の詳細は、(。時々私はまだ提出行うページに選んだ従業員を表示していないしたい場合があります)なぜ私がこのすべてを試みているのかを説明するのに役立ちます。 NET 4.5を使用してASP.NET Webフォームアプリケーションを作成しています。私は自分のページでJavaScriptをますます使い始めましたが、この特定のページでは、サーバーの実際のポストバックをトリガーしたいので、ASP.NETページのライフサイクルからボタンのクリックイベントを処理してGridViewに移入できます。そのため、JavaScriptを使用してasp:ボタンをクリックしてフォームの送信を可能にしたいのです。

そして、最も重要なのは...それを自分で試してみてください---> ASP.NETに

繰り返しますが、この問題は、それ固有のものではありません.....以下jsFiddleリンクを参照してください。私は通常のHTMLとjQueryのUIを使ってJsFiddleで同じ問題を再現することができました。ここでJsFiddleリンクは次のとおりです。

http://jsfiddle.net/fENyZ/18/

あなたがコード内で見ることができるように、私はすでに、jQueryのDOM操作を経て、フォーム内のjQuery UIのダイアログを動かすの「修正」を使用しようとしました。これは問題を解決するようには見えません。

ありがとうございます!私は助けていただきありがとうございます!

HTML

<html> 
<head></head> 
<body> 

    <form action="http://www.google.com/index.html" method="post"> 

     <input type="button" value="Open jQuery dialog" id="btnOpenDialog" /> 
     <br /><br /><br /> 

     The button below submits the form correctly if you click it.<br /> 
     However, when I try to trigger click() event on this button <u>from within the jQuery UI Dialog above</u> then the form <b>fails to be submitted. 
     </b><br /> 

     <input type="submit" value="Submit Form" id="btnSubmitForm" /> 
     <input type="hidden" id="hdnEmployeeChosen" value="" />    
    </form>  


    <div id="divPopup" class="dialogClass" style="display: none;"> 
     Picking an employee below <b>ought to</b> cause the form to submit, but sadly it does not... 
     <br /><br /> 

     <div class="divOptions"> 
      <input type="button" value="Pick" class="pickButton" employeeName="Weird Al" /> 
      Weird Al Yankovic 
     </div> 
     <div class="divOptions">    
      <input type="button" value="Pick" class="pickButton" employeeName="Dracula" /> 
      Count Dracula 
     </div> 
     <div class="divOptions">   
      <input type="button" value="Pick" class="pickButton" employeeName="David" /> 
      David Copperfield 
     </div>   
    </div> 

</body> 

はJavaScript

$(document).ready(function() 
{ 
    var jqueryDialog = $('#divPopup') 
       .dialog({ 
        autoOpen: false, 
        modal: true, 
        title: 'My Dialog', 
        width: 300, 
        height: 300, 
        draggable: false, 
        resizable: false 
       }); 

    // This "fix" does not appear to help matters.......... 
    jqueryDialog.parent().appendTo($("form:first")); 

    $('#btnOpenDialog').click(function() { 
     jqueryDialog.dialog('open');  
    });  

    $('.pickButton').click(function() { 

     // Put picked value into hidden field 
     var pickedEmployee = $(this).attr('employeeName'); 
     $('#hdnEmployeeChosen').val(pickedEmployee); 

     // Try to cause a submit (ASP.NET postback in my case)   
     // THIS PART DOES NOT WORK................. 
     $('#btnSubmitForm').click(); 

     //alert($('#hdnEmployeeChosen').val()); 
    });  

}); 

CSS

form { 
margin: 5px; 
    border: 1px solid black; 
    background-color: #EEE; 
    padding: 15px 5px; 
} 

.dialogClass { 
border: 1px solid black; 
padding: 5px; 
margin: 5px; 
    background-color: LightBlue; 
    font-size: 14px; 
} 

.pickButton { 
    margin-right: 5px; 
} 

.divOptions { 
    margin-bottom: 3px; 
} 

答えて