Asp.Net 양식 DefaultButton 에 오류가 Firefox
문제
니다.Net 에 대해 생성된 코드 형태로"DefaultButton"속성을 설정함 가난한 javascript 할 수있는 기능을 작동하는 IE 에서만 다른 브라우저에서(파이어 폭스 specifcially).
을 타격을 입력 키가 제출하는 형태로 모든 브라우저 하지만 파이어 폭스할 수 없는 무시 키를 누르면 발생하면 내부의 <textarea> 제어합니다.이 결과는 여러 텍스트 영역을 제어할 수 없는 여러에서는 파이어 폭스로는 키를 입력 양식을 제출하는 대신 새로 만드는 라인입니다.
에 대한 자세한 정보는 버그 그것을 읽기.
이 될 수 있습에서 수정 Asp.Net 3.0+지만 여전히 해결 방법을 만들 2.0.
에 대한 아이디어 가장 가벼운 해결 방법(해킹는 것처럼 보이지 않는 해킹=D)?에서 솔루션을 위 링크를 무서워하는 나에게 작은 수로 쉽게 의도하지 않은 부작용이 나타납니다.
해결책
저는 이 기능을 사용하에서 적응 codesta.[편집:매우 동일한 하나,나는 당신을 무서워!죄송합니다.을 도울 수 없습니다.]
http://blog.codesta.com/codesta_weblog/2007/12/net-gotchas---p.html.
당신이 그것을 사용하여 주변에서 코드의 div 다음과 같다.할 수 있습 서브 클래스 형태를 포함하이 자동으로 합니다.나는 그것을 사용하지 않는,그렇지 않았습니다.
<div onkeypress="return FireDefaultButton(event, '<%= aspButtonID.ClientID %>')"> (your form goes here) </div>
여기에 함수입니다.
function FireDefaultButton(event, target) { // srcElement is for IE var element = event.target || event.srcElement; if (13 == event.keyCode && !(element && "textarea" == element.tagName.toLowerCase())) { var defaultButton; defaultButton = document.getElementById(target); if (defaultButton && "undefined" != typeof defaultButton.click) { defaultButton.click(); event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } } return true; }
다른 팁
그것은 수정 codesta.com 는 포 링크하는 것은 더 이상 필요하지 않기 때문에,해결의 이벤트입니다.srcElement 지에 integrade ASP.NET 3.5.의 구현 DefaultButton 가 그러나 여전히 몇 가지 문제가 있기 때문에,그것은 잡고 Enter 키를 눌러서 너무 많은 경우.예를 들어:이 있는 경우 활성화 버튼 형태를 사용하여 탭을 눌러 입력해 버튼을 클릭하고 제출하지 않습니다.
다음을 포함 JavaScript 코드의 맨 아래에서 당신의 ASP.NET 웹 페이지에 입력하는 방식으로 작동합니다.
// Fixes ASP.NET's behavior of default button by testing for more controls
// than just textarea where the event should not be caugt by the DefaultButton
// action. This method has to override ASP.NET's WebForm_FireDefaultButton, so
// it has to included at the bottom of the page.
function WebForm_FireDefaultButton(event, target) {
if (event.keyCode == 13) {
var src = event.srcElement || event.target;
if (!(
src
&&
(
src.tagName.toLowerCase() == "textarea"
|| src.tagName.toLowerCase() == "a"
||
(
src.tagName.toLowerCase() == "input"
&&
(
src.getAttribute("type").toLowerCase() == "submit"
|| src.getAttribute("type").toLowerCase() == "button"
|| src.getAttribute("type").toLowerCase() == "reset"
)
)
|| src.tagName.toLowerCase() == "option"
|| src.tagName.toLowerCase() == "select"
)
)) {
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton && typeof (defaultButton.click) != "undefined") {
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
}
return true;
}
이를 위해 특별한 문제점,이기 때문에 자바 스크립트를 생성하여 ASP.NET 2.0 부 IE 만 표기:이벤트입니다.srcElement 이지에서 사용 가능 파이어 폭스(이용 이벤트입니다.대상):
function WebForm_FireDefaultButton(event, target) {
if (!__defaultFired && event.keyCode == 13 && !(event.srcElement &&
(event.srcElement.tagName.toLowerCase() == "textarea"))) {
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton && typeof(defaultButton.click) !=
"undefined") {
__defaultFired = true;
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
return true;
}
면 우리는 변화는 첫번째 2 개 라인으로:
function WebForm_FireDefaultButton(event, target) {
var element = event.target || event.srcElement;
if (!__defaultFired && event.keyCode == 13 && !(element &&
(element.tagName.toLowerCase() == "textarea"))) {
을 넣어 변경된 코드 파일에서 다음
protected void Page_Load(object sender, EventArgs e)
{
ClientScript.RegisterClientScriptInclude("js1", "JScript.js");
}
다음은 작업 모두에 대한 IE,FireFox.
출처:
http://www.velocityreviews.com/forums/t367383-formdefaultbutton-behaves-incorrectly.html