2011-12-31 10 views
1

jqueryに新しいImが出ました。このページはFirefoxとChromeで完璧に機能しますが、IE8のbeforeSend関数では、私が何をしても「すべてのフィールドが必要です」と表示されます。誰かがいつもこの機能を失敗させるためにIEがしていることを私に指摘できますか?ありがとう。JQuery AJAX beforeSend関数が失敗しましたIE 8

<html> 
<head> 
<title>Contact form</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<link href="../css/modal_company.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="../js/jquery-1.7.1.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
function getQueryParams(qs) { 
    qs = qs.split("+").join(" "); 
    var params = {}, 
     tokens, 
     re = /[?&]?([^=]+)=([^&]*)/g; 
    while (tokens = re.exec(qs)) { 
     params[decodeURIComponent(tokens[1])] 
      = decodeURIComponent(tokens[2]); 
    } 
    return params; 
} 
var $_GET = getQueryParams(document.location.search); 
var holy = $_GET["strUser"] 
document.getElementById('hide').value = holy; 
    $('#submit_button').click(function() { 
     $.ajax({ 
      type: 'POST', 
      url: 'item_add.php', 
      data: $('form').serialize(), 
      dataType: 'json', 
      beforeSend: function() { 
       var item_num = $('#item_num').val(); 
       var descript = $('#descript').val(); 
       var quanti = $('#quanti').val(); 
       var fdaa = $('#fdaa').val();     
       if (!item_num[0] || !descript[0] || !quanti[0] || !fdaa[0]) { 
        $('#output').html('All fields are required'); 
        return false; 
       }     
      }, 
      success: function(response) { 
       if (response.status == 'success') { 
        $('#formcont').html(); 
       } 
       $('#output').html(response.errmessage); 
      } 
     });   
    }); 
}); 
</script> 
</head> 
<body> 
<div id="formcont" style="text-align:center; margin:0; padding:0; height:100%;"> 
    <form id="myform"> 
    <fieldset> 
     <div style="text-align:center; margin-bottom:20px; border-bottom:thin #000; width:100%;"> 
     <h2>Add an Item</h2> 
     </div> 
     <p> 
     <label for="hide"><strong>Manufacturer:</strong></label> 
     <input type="text" readonly name="hide" id="hide" size="30" value="" style="background-color:#CCC" /> 
     </p> 
     <p> 
     <label for="item_num"><strong>Item/Catalog #:</strong></label> 
     <input type="text" name="item_num" id="item_num" size="30" /> 
     </p> 

     <p> 
     <label for="descript"><strong>Description:</strong></label> 
     <input type="text" name="descript" id="descript" size="30" /> 
     </p> 
     <p> 
     <label for="quanti"><strong>Quantity Per Unit:</strong></label> 
     <input type="text" name="quanti" id="quanti" size="30" /> 
     </p> 
     <p> 
     <label for="fdaa"><strong>Is this Item FDA Approved?</strong></label> 
     <input type="text" name="fdaa" id="fdaa" size="30" /> 
     </p>  
    </fieldset> 
    <div id="output" style="width:100%; color:red; text-align:center;"></div> 
    <div style="text-align:center; margin-bottom:0px; border-bottom:thin #000; width:100%; margin-left:105px;"> 
     <p style="text-align:center;"> 
     <input type="button" value="Submit" id="submit_button" /> 
    </p> 
     </div> 
    </form> 
</div> 
<div id="output"></div> 
</body> 
</html> 

注:この機能を削除すると、すべてIEでうまく機能します。それはデータベースに提出し、私が探している成功メッセージを私に与えます。この機能について何がわからないのか。

+1

文字列で '[0]'を実行する目的は何ですか?例えばIE7でもサポートされていません。 – Esailija

+0

私が作業していた元のコードの中にあったので、それは私がそれに触れなかったので機能しました。それが問題だろうか? FirefoxとChromeで正常に動作します。 –

+0

'!item_num || !descript || !quanti || !fdaa' ...あなたのie8のバージョンが文字列の添字表記をサポートしていないことに感銘しました:P(私はしますがIE9互換モードで動作しています)コードは事実上同じです - if条件を渡しますifいずれの変数も空の文字列でした。 – Esailija

答えて

1

次のように検証部分を変更してみてください。

if (item_num == '' || descript == '' || quanti == '' || fdaa == '') { 
    $('#output').html('All fields are required'); 
    return false; 
} 

文字列に[0]を使用する必要はありません。

-1

正常な実行(つまり、ステータス4 ORステータス"complete")で成功が呼び出されます。あなたは下のレベルでより多くの制御を求めるとき...エラー処理のために他のケースで

$.ajax({ 
     type: 'POST', 
     url: 'item_add.php', 
     data: $('form').serialize(), 
     dataType: 'json', 
     beforeSend: function() { 
      var item_num = $('#item_num').val(); 
      var descript = $('#descript').val(); 
      var quanti = $('#quanti').val(); 
      var fdaa = $('#fdaa').val();     
      if (!item_num[0] || !descript[0] || !quanti[0] || !fdaa[0]) { 
       $('#output').html('All fields are required'); 
       return false; 
      }     
     }, 
     success: function(response) { 
      ... 
      $('#formcont').html(); 
      ... 
     }, 
     error: function(status, errorText) { 
      ... 
      $('#output').html(response.errorText); 
      ... 
     } 
}); 

をエラーを使用して、あなたが使用することができます。

complete(jqXHR, textStatus) 

を次のように...

... 
complete: function(req, status) { 
    .. 
    .. 
} 
... 
関連する問題