请问javascript写在onclick属性上先完成在运行动作之前?

Will javascript written on attribute onclick finished first before running the action?

我在我的项目中使用 JSF。 我的场景是我有一个包含很多输入字段的表单,在调用 a4j:commandButton 上的操作之前,我将使用 javascript 将输入字段转换为 JSON 数据。 我还没有使用非常大的表格进行测试,我当前的表格似乎是在 'onclick'.

上正确提交的

我的问题是属性 'onclick' 上写的所有 javascript 会在 运行 和 'action' 之前先完成吗?

我在网上看了一些文章,上面说 onclick = JavaScript 在发送 Ajax 请求之前调用的代码。 但是它并没有说它会在调用 'action'

之前完成所有 javascript

你能帮我解决这个问题吗? 谢谢!

这是示例代码

function transformToJson(object){
   //transform all input fields to json data
}
<a4j:commandButton onclick="submitJsonObject(transformToJson('.myForm'))"
    value="Save"
    action="#{bean.save}">
</a4j:commandButton>


<a4j:jsFunction name="submitJsonObject">
    <a:actionparam name="param1" assignTo="#{model.jsonData}" />
</a4j:jsFunction>

submitJsonObject 是一个 a4:jsFunction,它会将 jsondata 发送到我的模型中,transformToJson 和 submitJsonObject 会在实际调用 action="#{bean.save}" 之前完成吗?

首先,浏览器在 onclick 方法 returns 之前根本不应该提交任何数据,因为返回 false 将向浏览器发出根本不提交的信号。

在我见过的所有情况和框架中,生成的代码要么使用浏览器自己的内部提交,也就是说不会向 onclick 事件添加额外的代码 ORonclick 处理程序中的用户定义代码之后附加任何必需的代码。

如果有疑问,请使用您的浏览器检查工具,但假设所有代码都将在提交之前执行是相当安全的。