2013-05-19 52 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