IE7에서 confirm과disabled의 문제 및 해결 (asp.net)을 호환하고 표준 브라우저를 호환합니다

3121 단어 disabled
요 며칠 동안 이 방면의 솜씨가 너무 많아서 시험하지 않는 것은 asp이다.net의 원인은 역시 그 자체가 i7 자체의 원인이다. 문제는 다음과 같다.
왜냐하면 제출 버튼/링크를 클릭하면 대량의 데이터 처리가 이루어지고 시간이 오래 걸린다. 고객이 클릭한 후에 이 버튼을 회색으로 지우고 반투명한 팝업층으로 애니메이션을 불러오는 방안을 표시하지 않기 때문이다.그렇기 때문에 너무'웹 2.0'이다. 하하, 기업 내부 응용에 있어 원시적인 수법이 더 받아들일 때가 있다. 나는 매우 간단하다고 생각한다. 그래서 시작한 것이다. 현재 에피소드 하나가 관건적인 데이터를 제출하는 데 있어서 먼저 확인해야 한다. 왜 이 문제를 발견하지 못했는지 모르겠다. 어쨌든 이번에 만났는데 인터넷에서 검색을 많이 했다.
버튼 자체에 클릭 이벤트가 있고 온클라이언트 이벤트를 등록하면 그 반환값에 따라 데이터를 제출할지 여부를 판단한다. 예를 들어 다음과 같다.
<asp:Button ID="Button1" runat=server Text="testbtn" CssClass="test" OnClick="testclick" OnClientClick="return confirm('sure?');" />

테스트는 순조롭게 통과되었지만 IE7에서 테스트를 했을 때 확인을 하든 거절을 하든 모두 제출한 것을 발견했습니다. 어쩔 수 없이 구글만 엉망진창인 원인을 알고 싶지 않았습니다. 다음과 같이 해결했습니다.
<asp:Button ID="Button1" runat=server Text="testbtn" CssClass="test" OnClick="testclick" 

OnClientClick="var r=false; if(confirm('sure?')) r=true; event.returnValue=r; return r;" />

이 예는 내가 겸사겸사 두 가지 문제를 해결했다. 하나, 이벤트로.returnValue=false;IE7의 제출을 막을 수 있지만 FF가 제출을 막을 수 없습니다.2 그리하여 리턴 false를 더한다.해결할 수 있을 거예요.
네, 이것은 confirm의 해결입니다.
 
다음 예의 간단함을 위해서, 우리는 confirm이 없다고 가정하고,disabled 문제를 직접 해결합니다.
단추를 누르면 이 단추를 사용하지 않는 이벤트를 터치합니다. 이렇게 하면 단추가 다시 눌릴 수 없고 데이터도 정상적으로 제출됩니다.
저희가 다 이 버튼으로 터치할게요.
<asp:Button ID="Button1" runat=server Text="testbtn" CssClass="test" OnClick="testclick" OnClientClick="dis(this);" />

물론 더욱 전면적으로 하기 위해서 우리는 때때로 A 라벨로 단추 모양을 모의하여 제출한다. 나는 이전에 사실 이렇게 했기 때문에 우리는 이 두 가지 효과를 동시에 테스트할 것이다.
asp:LinkButton ID="LinkButton1" runat="server" Text="test" CssClass="stepbtn" OnClick="btnNext_click" OnClientClick="dis(this);"></asp:LinkButton>

js가 독립되어 있고 jQuery를 사용합니다.
function dis(o){

	$(o).attr("disabled",true);

}

결과:
버튼:IE7이든 FF든 데이터를 제출할 수 있는 것은 하나도 없다. 비활성화는 비활성화되고submit류의 폼 컨트롤러로 제출하기 전에disabled 속성을 검사한다. 만약에 검사할 때 속성이 진짜라면 데이터는 제출되지 않는다.
하이퍼링크:IE7에서 예쁘게 회색으로 변했는데 제출이 안 돼요!유사한 폼 컨트롤을 사용한 논리 보이기;불여우 밑에서는 당연히 회색으로 변하는 효과가 없지만, 한 번 한 번 제출할 수 있다. 즉, 이 속성은 아무런 의미가 없다는 것이다.
 
이를 바탕으로 JS를 개조한다.
이외의 말은 대상을 매개 변수로 전달하는 데 편리하도록 전역 변수를 설정했기 때문에 setTimeout/setInterval에 매개 변수를 전달하는 방법에 관한 문제는 스스로 구글에서 처리하십시오. 변통할 수 있는 방법은 매우 많습니다.
var thisobj;

function dis(o){

	thisobj=0;

	setTimeout(function(){$(thisobj).attr("disabled",true);},300);//  ,      ,       

}

결과:
버튼: 우리가 원하는 효과;
하이퍼링크:IE7이 순조롭게 통과되었고 화호는 겨우 통과했다. 그러나 만약에 이 링크에 confirm 문구가 확인된다면 클릭할 때마다 튀어나올 것이다. 비록 검증을 거쳤지만 데이터는 한 번만 제출했다. 그래서 만약에 시스템의 대부분이 링크를 사용하여 제출했지만 이런 효과를 실현하려면confirm 전에만 이 요소의disabled 속성이 문자열'true'인지 확인할 수 있습니다. 볼값이 아닙니다. 물론 js에서'disabled'로 정의되어 있다면 가능합니다.본질적으로disabled는 폼 요소의 속성으로 폼 요소가 아닌 표준 브라우저에서 현재의 이런 문제가 발생할 수 있다.
 
이것은 완성한 후에 정리한 것이다. 예시 코드는 순전히 손으로 썼고 검증을 거치지 않았다. 만약에 복사한 과거가 무효라면 주로 사고방식을 살펴보자. 허허.

좋은 웹페이지 즐겨찾기