2012-01-24 6 views
1

私はフォーム設定をしていますが、JSはChromeで動作しますがIE9やSafariでは動作しません。面白いことに、送信ボタンが動作するChromeでは十分な情報が渡されません。送信ボタンはIE/Safariで動作しませんが、Chromeで動作しますが、フォーム情報が渡されません。

ここ
<a href="javascript: validate(); return false;"><img type="submit" src="lib/send_feedback.jpg" border="0" class="feedback-submit-img" /></a> 

が、それはやJSの問題があるに関連してもしなくてもよい、私の問題の第二の部分については

// Submit form to next page 
function submitForm() { 
    // document.forms["feedbackform"].submit(); 
    document.feedbackform.submit(); 
} 
// Submit form and validate email using RFC 2822 standard 
function validateEmail(email) { 
    // Modified version original from: http://stackoverflow.com/a/46181/11236 
    var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
    return re.test(email); 
} 
// Return true if email field is left unchanged 
function originalText(email){ 
    var defaultMsg; 
defaultMsg = "Enter your email address (optional)"; 
if(defaultMsg == email){ 
    return true;  
} 
return false; 
} 
// Verify or decline with error message 
function validate(){ 
    $("#result").text(""); 
    var email = $("#email").val(); 
    if ((validateEmail(email)) || originalText(email)) { 
     submitForm(); 
    } else { 
     $("#result").text(email + " is not a valid email."); 
     $("#result").css("color", "red"); 
} 
return false; 
} 
$("form").bind("submit", validate); 

を呼び出すJS何である - ここで

は私の送信ボタンです -

echo $POST['satisfaction']; 
echo $POST['user_email']; 
echo $POST['comments']; 
if(isset($POST['user_email'])){ 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

私はhere is a link to jsfiddleを編集していますページでより良い外観を希望の場合

編集マルコの要求ごととして、私はsubmitボタンの周りからのリンクを削除し、実際のボタン自体にonClickイベントを配置しました。これはIEとSafariの両方でこの問題を絶対に修正しました。今私の残りの質問/懸念は、POSTデータが次のページに正しく渡されない理由です。

Here is the complete source with George requested. - index.phpの

Page source gets passed to - フィードバックaccept.phpことが/言っ掲載されているとも

、何にソースを投稿するにStackOverflowの優先サイトはありますか?

Brianさんのコメントに応じて、POSTデータを破損することなく失敗した場合には、何が良い代替/回避策ですか?

+0

あなたは、生成されたソースを投稿することができますか? –

+1

さまざまな場所にある 'return false;'式の中には、フォームの送信を妨げるものがあります。 –

+0

イベント委任私の友人... [インラインイベント登録を避ける](http://stackoverflow.com/questions/6941483/onclick-vs-event-handler) – rlemon

答えて

1

クイックルックでは、ここでは機能の競合があると言います。サブミット・タイプを設計するときは、JS関数を呼び出すリンクの内側にある(アクション上の)フォームを送信することをブラウザに指示します。 JSでサブミットしている場合は、サブミット・タイプを使用せず、より適切に動作するかどうかを検討してください。 また、フォームのタグ内の単純な "onSubmit"のリンクを置き換えてそこからJS関数を呼び出すこともできます。このようにして、ブラウザがユーザーが送信ボタンを押したことをブラウザが認識すると、JS関数を望みどおりに呼び出し、この関数がtrueを返す場合、ブラウザは送信を許可します。

+0

それはまさに私がそれを見なかったかどうかわからない問題でした。私はまだJSで非常に新しいことを明らかにしています。何が間違っているかを説明する時間をとってくれて大変感謝しています。 私が提供したJSコードのいずれかがPOSTデータが渡されないようにしますか? – Eric

3

このコードを試してみてください。

のjQuery:

$(document).ready(function() 
{ 

    $('.validate').bind('submit click',function() 
    { 
     //Validate! 

     //is email 
     if(/..../.test($(this).find('input[name=email]').val())) 
     { 
      alert('Error!!!'); 
      return false; //STOP PROPAGATION 
     } 

     //Its okay! 
     //send form! 
     $(this).parents('form').submit(); 

     //click event stop propagation 
     return false; 
    }); 

}); 

HTML:

<a href="" class="validate">Submit</a> 

OR

<input type="submit" value="Submit" class="validate" /> 

OR

<button class="validate" >Submit</button> 
+0

何らかの理由でJSが私のPOSTデータが渡されないようにしている場合、これらは素晴らしい選択肢です。代替ソリューションを使用した徹底的な対応に感謝します。 – Eric

関連する問題