2012-02-03 6 views
6

asp.netアプリケーションのjQueryを使用してデータをポップアップに投稿しようとしています。asp.net/jQuery:jQueryをポップアップしてデータをポストする[IE]

ポップアップが開くと、3つのエラーが表示されます。 最初のエラーがある:

Errror: the value of the property is null or undefined not a function object 

(エラーコード【コードポップアップサイトである]のhttp://www.suckmypic.net/26449/e65f2d77.png、 ORIGコード【コードがポップアップしていますサイト]:http://www.suckmypic.net/26450/7dfdf013.png)

私はtwo errorsの正しく含まれている私的な機能を得ています。

次に、私がを再ロードした場合、ポップアップウィンドウすべてがうまくいきます。

私はこの方法でポップアップを開く:

$.post('popup.aspx', { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, function (result) { 

    hWndHelp = window.open('', 'help', cStyle); 
    hWndHelp.focus(); 
    hWndHelp.document.open(); 
    hWndHelp.document.write(result); 
    hWndHelp.document.close(); 
}); 

私は

(それは私が正常に動作してF1キーを押すことで呼んでいる機能に保存されています)メインページとポップアップウィンドウですべての関数とjqueryライブラリを参照しています。

編集

cStyle VARに対するコード:

var WIN_STYLE_RESIZE = 
    'resizable = yes, ' + 
    'status = yes, ' + 
    'scrollbars = yes'; 

var cStyle = 
     WIN_STYLE_RESIZE + ', ' + 
     'width = ' + w + ', ' + 
     'height = ' + h + ', ' + 
     'top = ' + y + ', ' + 
     'left = ' + x; 

I場合

(W、H、Y、Xは、ウィンドウサイズに基づか、数値計算されます)単純に'width=600,height=400'に変更すると、エラーが発生します。

変数をget経由で送信しても動作しますが、URLの変数を非表示にする必要があります。

の作業 getメソッド:

var getUrl = "popup.aspx?X="+$('#X1').val()+"&...."; 
hWndHelp = window.open(getUrl, 'help', cStyle); 

別の編集: だけで試してみましたクロームとFirefox - そこにエラーがありません。しかし、私はIEで動作するコードが必要です。

+0

あなたは最初のエラーが表示されますか? – Aristos

+0

2行目(1行目が空です) –

+0

私はあなたを失ってしまいました。コード上でこれを指摘することはできますか? – Aristos

答えて

2

まず。

私はすべての答えを試しましたが、私はまだインターネットエクスプローラでエラーが発生しています。

私は回避策を見つけましたが、私は入力フィールドで新しいフォームを生成することが自分のニーズには多すぎると思っています。

jQueryエラーを表示せずにデータをポップアップに投稿するための唯一の作業オプションなので、私はそれを使用することに決めました。

var form = document.createElement("form"); 
form.setAttribute("method", "post"); 
form.setAttribute("action", "popup.aspx"); 
form.setAttribute("target", "help"); 

var input = document.createElement("input"); 
input.type = "hidden"; 
input.name = "X"; 
input.value = $("#X").val(); 
form.appendChild(input); 

var input2 = document.createElement("input"); 
input2.type = "hidden"; 
input2.name = "XX"; 
input2.value = varX; 
form.appendChild(input2); 

var input3 = document.createElement("input"); 
input3.type = "hidden"; 
input3.name = "XXX"; 
input3.value = varXY; 
form.appendChild(input3); 

var input4 = document.createElement("input"); 
input4.type = "hidden"; 
input4.name = "Z"; 
input4.value = varZ; 
form.appendChild(input4); 

document.body.appendChild(form); 

hWndHelp = window.open("about:blank", "help", cStyle); 
hWndHelp.focus(); 

form.submit(); 
document.body.removeChild(form); 

オリジナルソース: http://taswar.zeytinsoft.com/2010/07/08/javascript-http-post-data-to-new-window-or-pop-up/

2

windowにアクセスする前に、少し時間を置いてください。これを試して。

$.post('popup.aspx', { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, function (result) { 

    var hWndHelp = window.open('', 'help', cStyle); 
    setTimeout(function(){ 
    hWndHelp.focus(); 
    hWndHelp.document.open(); 
    hWndHelp.document.write(result); 
    hWndHelp.document.close(); 
    }, 400); 
}); 
+0

私が試した:。 関数MyFunctionをを(){ '$(「#のあるmyForm」)(機能を提出(){ window.open( 'popup.aspx'、 'ヘルプ'、cStyle); $( '#のあるmyForm')目標= 'ヘルプ'; }); $( '#のあるmyForm')(提出します。 。);私は(私が説明したようウィンドウが開き、)このように私の関数を呼び出すことが、主なページをリロード次の秒にしています 'F1'を押してる –

0

popup.aspxにjQueryがないようです。それが含まれていることを確認してください。

+0

より慎重送信記事をお読みください –

1

jqueryライブラリが両方のページにロードされているようです。

そしてまた、あなたが$ $について$(関数(){} .......

$ .post速記機能を内.post含まれています。これは非同期として動作します。 できるだけ同期させることをお勧めします。

+0

をので、あなたはそれをどのように行うだろう –

+0

使用する$アヤックスを代わりに }' $ .post のhttp://api.jquery.com/jQuery.post/ – Rohit

1

はこれを試してみてください。回答のためにすべての感謝の

$.ajax({ 
    type: 'POST', 
    url: 'popup.aspx', 
    data: { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, 
    success: function(data, textStatus, jqXHR) { 

    var hWndHelp = window.open('about:blank', 'help', cStyle); 

    hWndHelp.focus(); 
    hWndHelp.document.open(); 
    hWndHelp.document.write(data); 
    hWndHelp.document.close(); 

    }, 
    dataType: 'html' 
}); 
1

私はこれを行うためのjQueryプラグインを作りました。 jQueryである必要はありませんが、私はです。

(function ($) { 
    $.submitFormToPopup = function (action, params, target, windowOpts) { 
     var formID = 'submitFormToPopup'; 
     var form = $('<form />') 
      .attr('method', 'post') 
      .attr('action', action) 
      .attr('target', target) 
      .attr('id', formID); 
     $.each(params, function (key, value) { 
      form.append($('<input />') 
       .attr('type', 'hidden') 
       .attr('name', key) 
       .attr('value', value)); 
     }); 
     $(document.body).append(form); 
     window.open('about:blank', target, windowOpts); 
     form.submit(); 
     $(document.body).remove('#' + formID); 
    }; 
})(jQuery); 
関連する問題