2011-12-31 4 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) { 
    .. 
    .. 
} 
...