2009-08-25 15 views
0

フォーム内の入力フィールドにフォーカスしているときに「入力」をクリックすると、次のコードが使用されるため、標準の送信ボタン機能が無効になります。むしろjavascriptは新しいフォームを作成し、別のページに投稿リクエストを送信します。私はこれを使用して、 "フォーム内のフォーム"機能を実現できるようにしています。入力フィールドには、投稿を実行するための同様のコードがある独自の送信ボタンがあります。IEでこのjQueryコードが動作しないのはなぜですか?

これは完全に機能します。 IEでEnterキーを押しても何もしません。コードは以下の通りです:

//event handler for input field within standard form 
$('#inputfield').bind('keypress', function(e) { 
    var code = e.keyCode || e.which; 
    if(code==13){ 
     //suppress default submit functionality 
     $('form').submit(function() { 
      return false; 
     }); 

     //...assemble some data here... 

     var url_string = "..."; 

     var $form = $("<form method='POST'>").attr("action", url_string); 
     $("<input type='hidden' name='body'>").attr("value",body).appendTo($form); 

     $("<input type='hidden' name='title'>").attr("value",title).appendTo($form); 

     //...create more form elements here... 

     $form.appendTo("body"); 
     $form.submit(); 
    } 
}); 

私はIE6,7,8で試したことがありますか?

更新:はちょうど問題について詳しく説明する:Firefoxの、最後の$form.submit();ラインにjqueryのは、提出すると、ページがリダイレクトするフォームを生成原因となります。 IEでは何も起こりません。 keypress をIEで実行します。そのフォームは送信されないようです。

+3

IEが吹いているので?申し訳ありませんが、しなければならなかった。 – Vince

+0

+1 ...私はしなければならなかった。 –

答えて

2

jQueryの代わりに通常のDOMサブミットメソッドを使用するとどうなりますか?

// instead of: 
// $form.submit(); 
// try this: 
$form[0].submit(); 

ie gives me a javascript error: 0 is null or not an object..

[OK]を、それはあなたのjQueryオブジェクトが空であることを示唆しています。

$form = $form.appendTo("body"); 
$form.submit(); 

をし、問題が解決しない場合は、これらのデバッグ行に置く:それは奇妙なことをやっているappendToかもしれない...これを試してみてください

alert($form.length); 
$form.appendTo("body"); 
alert($form.length); 
$form.submit(); 

[OK]を、私は今それを持っています:

これは、問題の原因となっているフォームを生成する行です。これに変更してください:

var $form = $("<form></form>").attr({"action" : url_string, "method" : "POST"}); 

これはjQueryのバグかもしれないので、私はよくわかりません。

+0

ie私にjavascriptエラーを返します:0はヌルかオブジェクトではありません... –

+0

それは動作しませんでしたので、私は両方のために0を警告するdubugging行を追加しました。(firefoxでは両方とも警告1) –

+0

はい!確かに非常に奇妙です。ご助力ありがとうございます! –

0

IE DOMが異なり、イベントをキャプチャするのがFFまたはChromeと異なります。

var key;  
if(window.event) 
     key = window.event.keyCode; //IE 
else 
     key = e.which; //firefox 

if(key == 13) 
     do a thing 
+0

私があなたのことを誤解していない限り、私のアップデートで言及したように、偶数はIEで解雇されているので、問題は主要イベント –

0

keypressイベントハンドラ関数の最後にfalseを返します。これは、ブラウザがカスタム関数の後に "通常の"結果を出さないようにします。

関連する問題