문제

니다.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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top