2011-11-08 3 views
0

Zend Framework 응용 프로그램이 있습니다. IE8과 jQuery에 문제가있는 것처럼 보입니다. jQuery는 여러 (많은) 게시물 이후에 절정에 이릅니다. 즉, 글의 수가 증가함에 따라 더 나 빠지게됩니다. 페이지를 다시로드하지 않고 데이터 항목을 작성한 후 잠시 후에 페이지를 다시 탐색하거나 페이지를 다시로드하려고하면 IE8이 실제로 이상하게 작동하지만 때로는 시도 할 수있는 모든 작업을 시도하고 시도 할 것이라고 말합니다. 페이지를로드하십시오. 거기에서 다시로드하면 리셋되고 모든 것이 잠시 작동하여 다시 빌드됩니다.IE8 jQuery AJAX weirdness

IE8에서 몇 가지 다른 탭이 열려 있다고 가정 해 봅시다. 응용 프로그램에서 다른 페이지로 이동하려고하면 IE8이 다시로드되기 전에 다른 탭과 깜박임을 표시합니다. 페이지를 표시하고 표시합니다. 이 시점에서 내가 다시로드하면 일반적으로 기대하는대로 작동합니다. 이 시점에서 다시로드하지 않으면 다음에 불량이 다시 생겨서 다시로드하려고 할 때 IE8에서 더 이상 시도하지 않을 것이라고 말하고 수동으로 탐색 모음에 URL을 입력해야합니다 응용 프로그램으로 돌아가십시오.

나는 그것이 내 키 누르기 바인딩과 관련이 있다는 느낌이 들지만, 나는 그 이유를 모르겠습니다. 다른 사람이 이것을 경험하고 잘못 된 것이 무엇인지 알아 냈습니까? 바인딩의 키가 발생한 경우 여기

$(document).ready() 기능입니다 :

$(document).ready(function(){ 

    running = false; 
    offset = $("#quantity").html(); 

    $("#boxNumber").focus(); 

    $(document).bind("keypress" , function(e){ 
     var firstName = document.getElementById('firstName'); 
     var middleName = document.getElementById('middleName');   
     if (e.which == 13 && (!$("#notes").is(":focus")) && (!$("#submit").is(":focus"))) { 
      if (running == false) { 
       running = true; 
       middleName.value = middleName.value.toUpperCase(); 
       firstName.value = firstName.value.substring(0, 1).toUpperCase() + 
            firstName.value.substring(1, firstName.value.size); 
       submitForm(); 
       return false; 
      } else { 
       return false; 
      } 
     } else if (e.which != 13 && $("#middleName").is(":focus") && $("#middleName").val() != '') { 
      firstName.focus(); 
      firstName.value = firstName.value + " " + middleName.value.toUpperCase(); 
      middleName.value = ''; 
     } 

    }); 
    bindTdClick(); 
    bindAutoComplete('oof_name'); 
    bindAutoComplete('pro_title'); 
    bindAutoComplete('tags'); 


    $("#submit").click(function(){ 
     if (running == false) { 
      running = true; 
      submitForm(); 
     } else { 
      return false; 
     } 
    }); 
}); 

문제는 또한 submitForm() 기능에있을 mght :

function submitForm() { 
    $.post("/ajax/files" , $("#files").serialize(), function(data){ 
     filesReset(); 
     if (data != "") { 
      $("#lastInsert table tbody:last").prepend(data); 
      $("#lastInsert table tbody:last tr:first").find("td").hide(); 
      $("#lastInsert table tbody:last tr:first").find("td").fadeIn(1000, function(){ bindTdClick(); }); 
      $("#lastInsert table tbody:last tr:first").effect("highlight" , {"color": "aqua"}, 1000); 

      $("#lastInsert table tbody:last tr:last").remove(); 
     } else { 
      alert("Insert rejected by the server: either inadequate criteria or the server is down."); 
      $("#hidden").click(); 
     } 
     running = false; 
    }); 
} 

또는 어쩌면 filesReset() 기능 :

function filesReset(){ 
    var lastName = $("#lastName").val(); 
    if (lastName.indexOf(',') != -1) { 
     lastName = lastName.substring(0, lastName.indexOf(',')); 
    } 
    $("#lastName").val(lastName).focus().select(); 
    $("#firstName").val(""); 
    $("#middleName").val(""); 
    $("#fil_will_recorder_rec_id").val(""); 
    $(".errors").remove(); 
    $("#lastInsert table").css({"border-right":"1px solid #D9D9D9"}); 
    $("#notes").val(""); 
    //$("#tags").val(""); 
    $("span").html(""); 
} 
+1

나는 더 나은 것을 모르기 때문에 나는 추측한다. – tjb1982

+0

아마도 jQuery IS js 때문일 수 있습니까? 네이티브 자바 스크립트는 실제로 대부분의 경우 더 빠릅니다. 어떤 종류의 질문이 ... – SteamDev

+0

한눈에 아무 것도 보이지 않지만 코드의 어느 시점에서 뭔가 동일한 동작 (반복적으로 keypress)에 묶여 있다고 의심됩니다. 반복적으로 호출되는 세그먼트를 확인하기 위해 몇 가지 경고 또는 방화 광구 중단 점을 추가 한 다음 테스트를 위해 IE로 돌아갈 수 있습니다. – Dave

답변

0

DOM에 꽤 무거워요. 당신이 열쇠를 쳤을 때마다 테이블이 많은 앱을 사용하면 IE8의 가벼운 DOM 조작 불쌍한 완두콩 머리가 폭발 해 버려 질 가능성이 있습니다.

자동 모양 지정 기능을 사용하면 모양이 흐릿하거나 포커스가있는 이벤트가! == 13 조건에서 더 잘 들리게 보입니다. 그것을 논평하는 것이 그것이 범인이라는 것을 드러내는 경우 keypress에서 그것을 움직이십시오.

첫 번째 조건의 항목은 두 번째로 치지 않습니다. === 13 체크가 실패하므로 정상이어야합니다.

해결할 수 있지만 상처를주지는 않을 것입니다. HTML을 찢어서 다시 넣지 않는 경우 모든 jQuery 선택 항목을 캐시하는 것입니다. 모든 영구 jq 객체를 다른 것을하기 전에 vars에 두 번 이상 액세스해야합니다. 예 :

var $_someId = $('#some_id'); 

ID는 실제로 정말 빠르다하지만 더 복잡한 선택에 대한 큰 차이를 만들 수 있습니다. jQuery가 단지 두포에서 사용하는 일반 DOM API 메소드에서도 마찬가지입니다.