2010-07-23 5 views
2

나는 이것으로 머리카락을 꺼냅니다. 비동기 적으로 이벤트 캘린더에 대한 데이터를 가져 오는 자바 스크립트가 있습니다. 기본적으로 한 달의 날짜를 클릭하면 약간의 UI가 표시되고 텍스트 영역에는 검색된 데이터가 채워집니다. 이 UI에는 두 개의 제출 버튼이 있습니다. 하나는 변경 사항을 저장하고 하나는 이벤트를 삭제하는 버튼입니다. 내 목표는 텍스트 영역에 이벤트가 채워지기 전까지 삭제 버튼을 비활성화하는 것입니다.Firefox를 제외한 모든 브라우저에서 Javascript 오류가 발생했습니다.

function editDialog(date,vis) 
{ 
    if(vis == "show") 
    { 
     var event="Loading..."; 

     if (window.XMLHttpRequest) 
     { 
      xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     { 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     xmlhttp.onreadystatechange=function() 
     { 

      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       event = xmlhttp.responseText; 
      } 
      document.getElementById('editwrapper').innerHTML="<div id='editdiv'>\ 
      <div><span class='bold'>"+date+" </span><div style='display: inline; float: right;'><a href='#' onclick=\"return editDialog('"+date+"','hide')\">Close</a></div><hr id='line'> \ 
      <form method='get' action='' onsubmit=\"return editDialog(this.newdate.value, 'show')\">\ 
      <label for='newdate'>Jump to: </label>\ 
      <input type='text' name='newdate' size='10'/>\ 
      <input type='submit' name='go' value='Go'>\ 
      </form>\ 
      <form style='display: inline;' action='' name='saveform' method='get' onsubmit='return instantUpdate(this.date.value,this.event.value)'>\ 
      <textarea name='event' rows='10' cols='40' onkeypress='saveform.edit.disabled=false'>"+event+"</textarea>\ 
      <input type='hidden' name='date' value='"+date+"'>\ 
      <input type='submit' name='edit' value='Save' disabled='disabled'></form> &nbsp; <form name='deleteform' style='display: inline; float: right;' action='' method='get' onsubmit=\"return instantUpdate(saveform.date.value,'')\"> <input name='deletebutton' value='Delete' type='submit'></form>\ 
      </div>\ 
      </div>"; 

      if(event=="" || event=="Loading...") document.deleteform.delete.disabled = true; 
     } 
     xmlhttp.open("GET","events.php?action=read&date="+date,true); 
     xmlhttp.send(); } } 

문제는이 문을있다 :

if(event=="" || event=="Loading...") document.deleteform.deletebutton.disabled = true; 

파이어 폭스는 잘 처리하지만, 사파리, 크롬, 오페라, 그리고 IE는 모든 hissy에 맞는 던져 여기 내 코드입니다. 자바 스크립트가 활성화되지 않은 사용자를 위해 내 폴백 기능으로 되돌립니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

Chromes 디버거는 무엇을 말 했나요? –

+0

jQuery를 사용하십시오 !!!!! – ChaosPandion

+0

나는 실제로 보지 않았다. 그러나 나는 그것을 사용하는 방법에 익숙하지 않다. 내가 알아낼 수 있는지 알게 될거야. – vince88

답변

1

난 그냥 생각을했다. delete은 키워드이므로 양식 필드 이름으로 사용하면 안됩니다. 일부 구현은 예약어 사용과 관련하여 다른 것보다 엄격 할 수 있습니다. 다른 이름으로 바꾸십시오.

+0

예, 이것입니다. 의견 중 하나에서 조언을 얻었고 Chrome의 디버거를 살펴 보았습니다. 삭제가 예외를 던져서 이름을 바꿨으므로 지금은 작동합니다. 감사. – vince88

+0

@vince - 행운을 빈다. jQuery를 시험 사용해 보는 것을 잊지 마라. – ChaosPandion

2

다중 행 문자열 상수는 비표준입니다. 다른 브라우저에서는 그렇게 할 수 없습니다.

긴 문자열은 다음과 같이해야합니다 :

var longString = "something something something" + 
    "more something something something " + 
    "and so on"; 
+0

조언 해 주셔서 감사합니다. 나는 그것을 명심 할 것이다. 그러나 나는 이것이 그 문제라고 생각하지 않는다. 나는 그것을 바꿨고 변화를 가져 오지 않았다. – vince88

+0

행 계속은 버전 5에서 ECMAScript 표준에 추가되므로 모든 브라우저에서 지원하기 전에는 다소 시간이 걸릴 수 있습니다. – ChaosPandion

+0

예 5 절에 있지만 IE7에서는 도움이되지 않는다는 것을 알고 있습니다 .-) – Pointy

관련 문제