문제

ASP.NET 2.0, FF3 및 IE7의 테스트.

텍스트 상자에서 'ENTER'버튼을 누르면 페이지의 첫 번째 이미지 버튼의 해당 "ONCLICK"이벤트가 시작됩니다. 해당 이미지 버튼을 제거하면 페이지에서 다음 ImageButton OnClick 이벤트가 발생합니다.

Firebug 콘솔에서 JavaScript를 사용하여 양식을 제출하면 이런 일이 발생하지 않습니다. 그러나 어떤 이유로 든 텍스트 상자에서 Enter를 치면 관련없는 ImageButton 이벤트가 트리거됩니다.

나는 찾았다 이 질문 비슷한 문제가 있었지만 ImageButtons에는 "useubmitbehavior"속성이 없기 때문에 해당 솔루션에 대한 제안 된 답변은 작동하지 않습니다.

이 이벤트가 왜 발사되는지 이해가 안 돼요. request.form을 보면 __eventTarget이 비어 있고 실제로 전체 폼 내용 (모든 텍스트 상자)을 게시하지만 ImageButton.x 및 ImageButton.y 키/값 쌍도 포함됩니다.

왜 이런거야? JavaScript를 사용 하여이 텍스트 상자에서 "입력"키 프레스를 감지 할 수 있다고 생각하지만 과거의 경험은이 동작이 브라우저간에 매우 다양하다는 것입니다. 제안이 있습니까?

도움이 되었습니까?

해결책

ASP 패널 또는 양식에서 기본 버튼을 설정해 볼 수 있습니다. 이렇게하면 사용자가 Enter 키를 누르면 어떻게되는지 제어 할 수 있습니다.

다른 팁

더 우아한 솔루션이 있습니다

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (event.keyCode!=13);" > </asp:TextBox>

전체 게시물을 읽으십시오 여기

프로젝트에서 같은 문제가 있습니다.

이 문제는 ASP.NET 때문에 발생합니다 언제나 첫 번째 요소가 상속되는 요소를 가정합니다 IButton 인터페이스 (버튼 및 ImageButton)는 페이지의 기본 버튼입니다.

Hipoteticaly, 버튼이나 ImageButton 대신 LinkButton을 사용하면이 문제가 해결됩니다.

더 많은 정보를 찾을 수 있습니다 여기 MSDN에서.

Enter 키를 누르면 비활성화 할 수 있으므로 사용자가 ImageButtons를 클릭해야합니다. 이 JavaScript 블록을 페이지에 붙여 넣으십시오.

<script type="text/javascript">
function stopRKey(evt) { 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
}
document.onkeypress = stopRKey;
</script>

최근에 저는 웹 서비스와 포스트 백이 적은 고객에 대해 더 많은 일을 해왔습니다. 내 컨트롤을 양식 요소 외부로 옮기면 (또는 완전히 제거) 문제가 사라집니다. ASPX 페이지에 기본적으로 삽입되었지만 최근까지 내가하는 일에 대해 많은 것을 필요로하지 않는다는 것은 나에게 발생하지 않았습니다.

Enter 버튼의 기본 동작은 텍스트가 아닌 영역에서 양식을 게시하기 위해 텍스트가 아닌 영역을 누릅니다. Postback을 중지하려면 JavaScript 방법으로 처리해야합니다.

Window.event.keyCode 속성을 확인하면 13과 동일했는지 확인하면됩니다. 그렇다면 0으로 재설정하십시오.

function KeyPress()
  {
     if (window.event.keyCode == 13)
        {
           window.event.keyCode = 0;
        }
  }

JavaScript를 사용 하여이 텍스트 상자에서 "입력"키 프레스를 감지 할 수 있다고 생각합니다.

그것이 제가 그 행동을 해결하기 위해 한 일이며 IE7과 FF3에서 훌륭하게 작동합니다. 조금 부자연 스럽습니다.

다음은 일반적인 예입니다.

    function TextBox1_KeyDown(sender, e)
    {
    var key;
        if(window.event)
            key = window.event.keyCode; //IE
        else
            key = e.which; //firefox
        if(key == 13 && $("#TextBox1").val() != "")
        {
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("TextBox1", "", true, "", "", false, true));
        }
        return (key != 13);
    }

유효성 검사기가 트리거가 필요했기 때문에 webform_dopostbackwithOptions를 사용했습니다. 그렇지 않으면 __dopostback을 사용하고 싶을 수도 있습니다.

다음은 "프로토 타입"입니다.

function __doPostBack(eventTarget, eventArgument)

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}

function WebForm_DoPostBackWithOptions(options)

도움이되기를 바랍니다.

추신 : 여기서 jQuery를 사용했지만 $ get은 동일합니다.

다른 사람 이이 문제가있는 경우 (다른 모든 솔루션이 저를 위해 작동하지 않기 때문에 다른 모든 솔루션이 당신을 위해 작동하지 않는 경우) 우아한 솔루션이 있습니다.

<asp:UpdatePanel runat="server">
<ContentTemplate>
    <asp:Panel runat="server" DefaultButton="doNothingButton">
        <ul id="shopping-list-ul">
        </ul>
        <asp:Button CssClass="invisible" runat="server" ID="doNothingButton" OnClientClick="return false;" />
    </asp:Panel>
</ContentTemplate>

텍스트 상자는 UL (JavaScript에 의해 생성) 내부에 있습니다.
Enter를 누르면 "DonothingButton"이 트리거되며, 이는 클라이언트 측에서 False를 반환하여 포스트 백이 전혀 발생하지 않습니다!

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