2013-05-19 2 views
0

동적으로 생성 된 양식에 제출 된 이벤트 리스너가 첨부되어있어서 데이터를 저장하라는 일부 아약스 요청을 할 수 있습니다.포커스를 잃을 때 양식 제출

그러나 포커스를 잃을 때도 제출하고 싶습니다.

form.submit()으로 전화를 걸었지만 이전에 생성 된 이벤트 수신기는 무시됩니다.

form.addEventListener('submit', function (event_handler) { 
    event_handler.preventDefault(); 
    /* some code */ 
}); 

// if loses focus 
form.addEventListener('blur', function (event) { 
    form.submit(); // submits, but ignores the defined eventListener so the preventDefault() is ignored. 
    return false; 
}, true); 

form.submit()이 제출 수신기 내에서 정의 된 코드를 실행할 것으로 예상했습니다.

이 문제를 해결할 수있는 방법은 없습니다.

jQuery 또는 다른 프레임 워크가 없습니다. 그냥 바닐라.

답변

1

실제로 문제가 있습니다. JavaScript form.submit()을 호출하면 이벤트 리스너를 재정의합니다. 간단한 솔루션은 제출자 함수 호출을 호출하여 호출하는 것입니다.

function runBeforeSubmit() 
{ 
    /* some code */ 
} 


form.addEventListener('submit', function (event_handler) { 
    event_handler.preventDefault(); 
    runBeforeSubmit(); <------------------------ shared code to process before submit 
}); 

// if loses focus 
form.addEventListener('blur', function (event) { 
    runBeforeSubmit(); <------------------------ shared code to process before submit 
    form.submit(); 
    return false; 
}, true); 
+0

실제로 작동합니다. 제출 이벤트에 대해 js 내장 메서드를 재정의 할 수 있지만 잔인한 방법입니다. 코드를 반복하지 않고 누군가가 트릭을 알고 싶어 했었습니다 (단 한 줄 일지라도). 감사합니다. . 답변을 수락했습니다. – elvispt

관련 문제