jQuery、FF/Chrome、IEのバグか、予期せぬ動作か分かりません。残念ながら、次のスクリプトが異なるブラウザで同じ結果を出すべきかどうかを判断するうえで、jQueryはうまくいきません。jQuery v1.7.1、IEとChrome/FFの 'this'の内容が異なります
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<div id="c">
<form name="login" action="https://my_domain.com/my_login_script.php" method="post">
<input type="text" name="email" value="sss" />
<input type="text" name="password" value="pass" />
<input type="submit" value="go" />
</form>
</div>
<script type="text/javascript">
$("#c").find('form[name=login]').submit(function() {
alert($(this).serialize());
$('#c').html("");
alert($(this).serialize());
alert($(this).html()); // empty string in IE, contents of <form> under FF
return false;
});
</script>
</body>
</html>
それは何:イベントハンドラの形式ではdivの中に含まれる「#C」
- 割り当てハンドラは、シリアル化され、アラートボックスに表示されます。
- divの内容 "#c"を空文字に変更しました。
- フォームが再びシリアル化され、アラートボックスに出力文字列が表示されます。
- 内容は、 'これが' 警告ボックスに表示されている - それはIEでの空だとFF /クロームアラートボックスに
- メール= SSS &パスワード=パス
- 電子メール= sss &パスワード=パス//上記と同じ出力、 'これは変更されていませんか?しかし、IE9では
:
- メール= SSS &パスワード=
- "" //空の文字列
それはjQueryのバグです渡しますか?
あなたは$を使用することができます(この)の.html( '')の代わりに$の( '#のC')?私はそれを試して、これはクロムの2番目の警告で空の戻ります。 – Andy
この問題は、jQueryがブラウザ内で切り離されたフォームのシリアライズを処理する方法と思われます。 '$( '#c')の代わりに' $(this).detach(); 'を使用するとどうなりますか?html(" ");'? –
Andy:私はできますが、ここで問題を解決しようとはしていません。私はこれを偶然見つけ、バグかどうか疑問に思っていました。 – matt