2013-05-19 85 views
0

我有一個動態創建的表單,附帶一個提交事件監聽器,所以我可以做一些Ajax請求來保存數據。失去焦點時提交表單

但我也想在失去焦點時提交。

我打電話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或任何其他框架。只是香草js。

回答

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