jquery:表单中的ajax POST – 阻止在ajax调用上提交表单
我试图在一个表单(Drupal节点编辑表单)中执行ajax调用,但是在执行调用时,它似乎由于某种原因提交表单。 这是一个示例代码:
jQuery.ajax({ type: "POST", url: "my_custom/url", dataType: "html", data: {"text": jQuery("#edit-body").html() }, success: function(result){ console.log(result); } });
我可以通过在控制台中执行它来复制它,但我将其附加到表单内的按钮单击function。 在POST ajax调用上有关阻止表单提交的任何提示?
这是所要求的完整代码
jQuery("#edit-body").before(''); jQuery("#proofread_bot-submit").click(function(event){ event.preventDefault(); jQuery("#proofread_bot-button-holder").append(""); jQuery.ajax({ type: "POST", url: "proofread_bot/check", dataType: "html", data: {"text": jQuery("#edit-' . variable_get('proofread_bot_field') . '").html() }, success: function(proofread_result){ jQuery("#proofread_bot-submit").after(proofread_result); jQuery("#proofread_bot_throbber").remove(); } }); });
您需要覆盖表单的onsubmit事件以阻止提交:
$("formSelector").bind('submit', function (e) { var isValid = someYourFunctionToCheckIfFormIsValid(); if (!isValid) { e.preventDefault(); return false; } else { jQuery.ajax({ type: "POST", url: "my_custom/url", dataType: "html", data: { "text": jQuery("#edit-body").html() }, success: function (result) { console.log(result); } }); e.preventDefault(); return false; } });
通过电话
e.preventDefault(); return false;
您可以防止发生同步回发。
更新:如果您不想覆盖表单提交,也许您可以将您的按钮放在表单标签之外(如果需要,您可以使用css调整位置)?
如果您使用的是input type =“submit”按钮,那么您需要返回false; 在函数的末尾,以防止它提交。
另一个解决方案是按下单击按钮e.preventDefault()
$(".button").click(function(e){ e.preventDefault(); return false; });
您可以将提交按钮类型更改为按钮类型,并将“onclick”事件添加到该按钮。 input type =“button”value =“savebutton”onclick =“return doThisOnClick();”
function doThisOnClick(){ jQuery.ajax({ type: "POST", url: "my_custom/url", dataType: "html", data: { "text": jQuery("#edit-body").html() }, success: function (result) { console.log(result); } }); }
我认为这是最直截了当的。