使用JavaScript按下提交按钮时更改表单操作

时间:2014-02-10 14:53:36

标签: javascript jquery forms

我有一个如下的提交按钮。

<input type="submit" 
       name="btnDelete" 
       id="btnDelete" 
       value="Delete" 
       onclick="this.form.action='${pageContext.request.contextPath}/Country/DeleteMany'"/>

我按下时会导致表单操作发生变化。


但是,我需要在更改此操作之前调用另一个函数。另一个函数根据JavaScript的确认对话框返回一个布尔值。

我尝试了以下内容。

onclick="return confirmDeleteMuliple(); this.form.action='${pageContext.request.contextPath}/Country/DeleteMany'"

然而,该操作在提交时没有更改(当confirmDeleteMuliple()返回true时)。


我尝试将更改操作的代码放在单独的JavaScript函数中,如下所示。

function deleteManyAction()
{
    document.dataForm.action='${pageContext.request.contextPath}/Country/DeleteMany';
}

onclick属性更改如下。

onclick="return confirmDeleteMuliple();deleteManyAction();"

然而,deleteManyAction()函数从未被调用过。仅当从confirmDeleteMuliple()移除函数onclick时,它才有效。

如何以定义的顺序调用这两个函数?

表达式${pageContext.request.contextPath}计算加载时的应用程序的上下文路径,如/Example(解析此文件(JSP)时)。

2 个答案:

答案 0 :(得分:1)

永远不会达到return之后放置的代码。 return基本上意味着停止工作并给我你所拥有的东西。

这应该做你想要的:

onclick="return submit();"

function submit(){
   if(confirmDeleteMuliple()){
       deleteManyAction();
       return true;
   }else{
       return false; //Otherwise the form will be submitted anyway.
   }
}

答案 1 :(得分:1)

尝试将代码(JS)保留在表示层(HTML)之外。我在我的JS文件中分配了所有的事件处理程序。尝试这种方法,我认为这将使您的代码:

$("#btnDelete").click(function() {
    if ( confirmDeleteMuliple() ) {
       this.closest("form").attr("action", 
                                 ${pageContext.request.contextPath} + '/Country/DeleteMany');
       # Here, returning true will allow the form submission to complete with the new
       return true;
    } else {
       # This will stop the form from being submitted
       return false;
    }
});