【问题标题】:How do I add jQuery click event to Django admin save and continue button?如何将 jQuery 单击事件添加到 Django 管理员保存并继续按钮?
【发布时间】:2013-12-06 19:45:41
【问题描述】:

我正在尝试向 django 管理表单添加一些复杂的 javascript 验证。当用户单击三种类型的保存按钮(savesave and continuesave and add another)中的任何一种时,我的 javascript 将运行.它所做的部分工作是在发布之前进行 ajax 调用以提供特殊检查。当我使用 add and continue 按钮的 jquery 捕获点击事件时,有时我会停止提交表单,有时我允许提交它。有时,只抛出警告而不是错误,然后用户可以决定是否应该继续提交表单。

最终提交时,需要按照他们最初点击的按钮所指定的流程进行提交。我发现添加form.submit();的JS只是按保存按钮提交,把用户带回模型列表,即使用户最初点击了保存并继续按钮。

我将我的 JS 从 form.submit(); 更改为捕获按钮本身并在用户选择忽略警告时触发绕过验证的点击。但保存后仍会返回模型列表,即使单击的按钮是保存并继续

当用户按下该按钮时,Django 管理员在客户端指示 save and continue 而不是普通的旧 save 做什么?

所以这是我的问题的简短摘要版本...

我如何使用 Javascript(包括 jQuery)强制提交 Django 管理表单:

  • 保存并继续
  • 保存并添加另一个

提前感谢您的帮助。

【问题讨论】:

    标签: javascript jquery django forms


    【解决方案1】:

    我想通了。我必须创建一个隐藏字段,其中包含已单击按钮的名称和已单击按钮的值,并将该字段与表单一起提交。效果很好!


    编辑(从 2020 年 2 月开始)

    所以我最初在几年前发布了这个问答,过去几个月没有使用 Django,但我看到有人想要我的代码。根据记忆和我仍然拥有的几段代码工作,它是这样的(未经测试)......

    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(''));
    });
    

    【讨论】:

    • 请分享您的演示。
    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2012-01-25
    • 2013-01-07
    相关资源
    最近更新 更多