문제

다양한 HTML 요소의 기본 동작이 무엇인지에 대해 정의된 표준이 있는지 궁금합니다.나는 보았다 W3C의 HTML 사양 요소와 함께 사용할 수 있는 속성(양식 제출에 정확히 포함되는 것과 같은 일부 동작 관련 항목)에 대해 매우 정확하지만 요소의 동작에 대해서는 아무것도 없습니다.나도 확인해 봤는데 모질라 JS 참조, 거기에서도 아무것도 발견하지 못했습니다.

특히 양식 제출 버튼의 기본 동작을 찾고 있습니다.나는 여러 곳에서 기본 작업이 양식을 제출하는 것이고 기본 작업이 양식을 제출하는 것이 아니라 초점을 맞추는 것임을 보았습니다.따라서 이에 대한 합의가 이루어지지 않은 것으로 보인다. onclick="return false;" 제출 버튼은 양식 제출을 중지할지 여부를 결정합니다.

(명확하게 편집 - 제출 항목에 대해 양식 수준 유효성 검사를 수행하려는 것이 아닙니다. onclick 또는 그런 것;만약 그렇다면, 나는 양식의 onsubmit 대신에.저는 특히 버튼 클릭을 포착하고 잠재적으로 이 경우 양식을 제출하지 않는 데 관심이 있습니다.결국 버튼이 필요할 수도 있습니다. onclick 양식의 일부 상태를 설정합니다. onsubmit 검사하지만 할 수만 있다면 return false 그렇다면 정말 좋습니다.그렇지 않더라도 어떤 순서로 작업을 수행하는지가 중요합니다. onsubmit 그리고 onclick 핸들러가 해고됩니다(예:버튼이 클릭 핸들러를 실행하기 전에 제출을 전달합니까?) 다시 한 번 어디에서나 지정된 것을 본 적이 없습니다.)

단순히 테스트를 코딩하는 것이지만, 존재한다면 의심할 바 없이 미묘함을 놓칠 수 있는 사소한 테스트의 결과보다는 사양/문서화된 동작에 의존하는 편이 낫습니다.특히 지난주에 빠른 테스트를 진행했는데 그 내용을 보여주는 것 같았습니다. 하지 않았다 양식 제출을 중지했지만 오늘 양식 제출을 실행하면 하다.어떤 브라우저를 사용하는지에 대한 권위 있는 리소스를 찾지 못했습니다. 실제로는 해당 요소와 상호작용할 때(예:기본 작업이 무엇인지, 제출 버튼에 대한 onclick 핸들러가 양식 제출 발송 전 또는 후에 실행되는지 여부 등)

이 경우 어디를 봐야 할지에 대한 조언을 환영합니다.

도움이 되었습니까?

해결책

관련 문서는 다음과 같습니다 DOM3 이벤트 그리고 HTML 5 사양.

필요한 모든 정보가 없을 수도 있지만해야합니다. 그러니 부족하다면 제발 해당 동작을 지정하도록 요청하십시오.

다른 팁

이에 대한 사양을 찾기가 어려울 수있는 한 가지 이유는 둘 이상의 행동을보고 있기 때문입니다.

환경 onclick="return false;" 제출 버튼이 양식을 제출하지 못하지만 양식이 제출되지 않도록합니다. 양식의 필드에 초점이있을 때 Enter를 누르면 제출 버튼이 포함되지 않고 양식 자체를 제출할 수 있습니다. (정확한 세부 사항을 알지 못하고 하나의 브라우저마다 다를 수 있지만 원칙을 볼 수 있습니다.)

이러한 특정 시나리오의 경우 브라우저가 다르게 행동하기 때문에 다른 이벤트 속성을 실험 할 수 있습니다. onlick은 버튼을위한 것이므로 OnSubmit은 양식 이벤트이므로 자연스럽게 Onclick에 대해 False를 반환하면 제출시 발효되지 않으면 OnSubmit을 별도로 처리하거나 제출 버튼에 제출을 위임해야합니다 (Return False OnSubmit을 반환하고 OnClick 핸들러에 Form.Submit을 갖도록하십시오). 효과가있다

나는 당신이 이미 이것을 알고 있을지도 모른다는 것을 알고 있지만, 양식을 다룰 때 내가 선택한 다른 팁, event.cancelbubble = true 및 event.returnValue = false (즉, Firefox에 대해 확신하지 않음), 때로는 거짓이 좋지 않습니다. 충분한...

문서에 관해서는 MSDN 라이브러리가 모든 이벤트에 대한 기본 조치를 문서화합니다. 다음은 다음과 같습니다.http://msdn.microsoft.com/en-us/library/ms535249(vs.85).aspx#

흥미롭게도 : 제출 방법은 OnSubmit 이벤트 핸들러를 호출하지 않습니다.

그것은 위대합니다. 그렇지 않으면 무한 루프로 갔을 것입니다!

그리고 여기에 onlcick의 문서가 있습니다http://msdn.microsoft.com/en-us/library/ms536913(vs.85).aspx

MSDN 라이브러리는 모든 이벤트 및 오브젝트도 문서화하지만 가격은 모두 구체적입니다!

예, 리스너를 사용하여 버튼을 설정할 수 있습니다. 버튼을 클릭하면 양식 제출을 중지할 수 있습니다.양식 제출은 '단추' 의 유형 (중요) 양식을 제출하세요.

이벤트 메소드인 PreventDefault(또는 브라우저가 따르는 이벤트 모델에 따라 창 이벤트의 경우 returnValue=false)는 기본 제출 동작을 방지합니다.나는 또한 stopPropagation(MSIE evt.모델 = cancelBubble).

예를 들어, ' 유형의 다음 버튼의 경우제출하다':

<button type="submit" id="logout" name="logout" value="Log Out">Log Out</button>

해당 특정 버튼에 대해 x-browser 이벤트 리스너를 추가합니다.예를 들어 testlogout이 버튼을 클릭할 때 발생하는 작업을 제어하는 ​​함수의 이름이라고 가정하면 다음과 같은 항목을 사용하여 리스너를 설정할 수 있습니다.

var logoutBtn = (document.getElementById && document.getElementById('logout')) || 
   (document.all && document.all['logout']) || document.forms[formname].elements['logout'] || null;
if (logoutBtn) {
   if (logoutBtn.addEventListener) {
       logoutBtn.addEventListener('click',testlogout,false);
   } else if (window.attachEvent) {
       logoutBtn.attachEvent('onclick',testlogout);
   } else {
       //legacy:
       logoutBtn.onclick = testlogout;
       //...logic for document.layers support, etc.
   }
}

그런 다음 자동으로 이벤트를 전달하는 testlogout 함수에서 모든 조건을 테스트합니다.설정한 조건에 따라 브라우저가 지원하는 것에 따라 event.preventDefault 또는 returnValue를 사용하십시오.이는 인라인 '을 대신합니다.거짓을 반환하다'.예를 들어:

function testlogout(e) 
{
    e = e || window.event;
    //... your logic here...
    e.stopPropagation?e. stopPropagation():(e.cancelBubble?e.cancelBubble():"");
    e.preventDefault?e.preventDefault():e.returnValue=false;
    return false; // in case all else fails?
}

전달된 이벤트에는 물론 브라우저가 따르는 모델에 따라 이름이 달라지는 고유한 속성 집합이 있습니다.예를 들어 이러한 속성은 클릭한 대상 버튼을 식별합니다.

현재 이벤트 청취 모델은 다음과 같습니다. ~ 아니다 '에 주목하라거짓을 반환하다'.ㅏ '거짓을 반환하다'라는 명령은 말하자면 귀머거리가 될 것입니다.하지만 그들이 이해하는 것을 사용한다면 걱정하지 마세요.

이것이 현재의 근본적인 문제를 해결하는 데 도움이 되기를 바랍니다.DOM 이벤트 및 이벤트 모델을 읽으면 사용 가능한 메서드와 속성이 명확해집니다.

제출 버튼을 전혀 사용하지 않는 이유는 무엇입니까? 버튼 만 사용하지 않는 이유는 무엇입니까? <input type="button" onclick="function(){if(allCriteriaIsMet()) this.form.submit()}" value="click me"/>

아니면 내가 뭔가를 놓치고 있습니까?

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