Javascript 如何将jQuery单击事件添加到Django管理员保存并继续按钮?
我试图在django管理表单中添加一些复杂的javascript验证。当用户单击三种类型的保存按钮(保存,保存并继续,或保存并添加另一个)时,我的javascript将运行。它所做的部分工作是在发布之前调用ajax以提供特殊检查。当我使用jquery的添加并继续按钮捕获点击事件时,有时我会停止提交表单,有时我会允许提交表单。有时,只抛出警告,而不是错误,然后用户可以决定继续提交表单 当最终提交时,需要使用他们最初单击的按钮指定的流程提交。我发现添加Javascript 如何将jQuery单击事件添加到Django管理员保存并继续按钮?,javascript,jquery,django,forms,Javascript,Jquery,Django,Forms,我试图在django管理表单中添加一些复杂的javascript验证。当用户单击三种类型的保存按钮(保存,保存并继续,或保存并添加另一个)时,我的javascript将运行。它所做的部分工作是在发布之前调用ajax以提供特殊检查。当我使用jquery的添加并继续按钮捕获点击事件时,有时我会停止提交表单,有时我会允许提交表单。有时,只抛出警告,而不是错误,然后用户可以决定继续提交表单 当最终提交时,需要使用他们最初单击的按钮指定的流程提交。我发现添加form.submit()的JS仅根据保存按钮提
form.submit()的JS代码>仅根据保存按钮提交,将用户带回型号列表,即使用户最初单击了保存并继续按钮
我从form.submit()更改了我的JS
捕获按钮本身,并在用户选择忽略警告时触发绕过验证的单击。但即使单击的按钮是“保存并继续”,保存后仍会返回模型列表
当用户按下按钮时,Django管理员在客户端执行什么操作来指定一个保存并继续,而不是一个普通的保存
这是我的问题的简短总结版
如何使用Javascript(包括jQuery)强制提交Django管理表单,该表单将:
- 保存并继续
- 保存并添加另一个
提前感谢您的帮助。我已经解决了这个问题。我必须创建一个隐藏字段,其中包含已单击按钮的名称和已单击按钮的值,并将该字段与表单一起提交。工作得很好
编辑(从2020年2月起)
所以我最初在几年前发布了这个Q&A,在过去的几个月里没有与Django合作,但我发现有人想要我的代码。从内存和我手头的一些代码开始工作,它是这样的(未经测试)
var-frm=$('form');
var chosenBtn=frm.find('[name=“_save”]');
var btns=frm.find('[name=“\u save”],[name=“\u addother”],[name=“\u continue”]”);
btns.unbind('click.btnAssign')。bind('click.btnAssign',函数(e)
{
chosenBtn=$(本);
});
frm.unbind('submit.saveStuff').bind('submit.saveStuff',函数(e)
{
//在此处添加您自己的验证。如果验证失败,您可以调用:
//e.预防违约();
//但如果它能工作,就不需要那条线。如果一切正常。。。
附加(
[
''
].加入(“”);
});
请分享您的演示。
var frm = $('form');
var chosenBtn = frm.find('[name="_save"]');
var btns = frm.find('[name="_save"], [name="_addanother"], [name="_continue"]');
btns.unbind('click.btnAssign').bind('click.btnAssign', function(e)
{
chosenBtn = $(this);
});
frm.unbind('submit.saveStuff').bind('submit.saveStuff', function(e)
{
// Add your own validation here. If the validation fails, you can call:
// e.preventDefault();
// But if it works, no need for that line. If everything works...
frm.append(
[
'<input type="hidden" name="',
chosenBtn.attr('name'),
'" value="',
chosenBtn.attr('value'), // or maybe chosenBtn.text()
'" />'
].join(''));
});