【问题标题】:Detecting if form has changed, script not working检测表单是否已更改,脚本不起作用
【发布时间】:2016-04-04 00:12:09
【问题描述】:

我正在尝试使用以下脚本来检测我的表单中的任何字段是否已更改(编辑:检测我的表单字段的值是否已更改),如果是,则提醒用户。否则显示另一个js框。

但它没有检测到任何更改,并且从未显示确认框。我做错了什么?

$('#eventMedia').click(function() {
        var form_changed = false;

        $('#tribe-events > form').on('keyup change', 'input, select, textarea', function(){
            form_changed = true;
        });

        if (form_changed == true) {
            confirm('You have unsaved changes! Click Cancel to save your changes before continuing.');
        } else {
            $('#eventMediaBox').show();
            $('#blackFade').show();
        }
    });

【问题讨论】:

  • “检测我的表单中是否有任何字段发生了变化”?....从什么到什么?
  • 抱歉,请检测我的任何表单字段的值是否已更改。
  • 那么什么是#eventMedia?是不是填完表格后点击的???如果是这种情况,在单击元素后如何检测先前所做的键控或更改。您需要将它们绑定在 click 方法之外。
  • 单击#eventmedia 会在页面上显示一个允许用户上传图像的新元素。一旦他们保存了上传的图片,页面刷新并且表单中任何未保存的更改都会丢失,因此我想提前提醒用户。
  • 那么您想要检测的更改是在单击按钮之前还是之后进行的?如果之前,我之前的评论是有效的。如果之后,则在未单击元素时检查您的 if 。您不会在上传之前调用它...

标签: javascript jquery forms conditional


【解决方案1】:

只有在单击 #eventMedia 按钮后,您才开始注册 keyupchange 事件,这可能不是所需的事情顺序。

改为:

// Set the boolean flag variable first
var form_changed = false;

// On `input change` events - set flag to truthy
$('#tribe-events > form').on('input change', 'input, select, textarea', function(){
    form_changed = true;
});

// Showtime!
$('#eventMedia').click(function() {
    if (form_changed) {
        alert('You have unsaved changes! Save your changes before continuing.');
    } else {
        $('#eventMediaBox, #blackFade').show();
    }
});

请注意"input" 事件(在.on('input change' 中)还将涵盖用户使用鼠标等粘贴内容的情况...

另外,不要忘记有时在代码中将 form_changed 重置为 false...


现在回想一下您的用户界面...我有一个问题。 “为什么?”。是的,如果用户没有更改表单中的任何内容,为什么要显示“SAVE”或#eventMedia 所做的任何事情?我的意思是,如果用户做了任何更改,那么就没有理由做任何事情 - 对吧?

我认为这应该足够了:

> button is disabled="true"
> (User makes changes?) on `input change` make enabled.

【讨论】:

  • 您可以删除form_changed == trueif ( form_changed ) 就足够了。 @roko-c-buljan
  • @KostasX 当然,但这完全取决于 OP。有时棘手的程序员会重复使用相同的变量来分配不同的类型值。
  • 是的,当然,但是您已经更改了 OP 代码!这也会使代码变得更好。
  • 非常感谢您的详细回答和解释。我对这些东西还不是很好(显然),当人们解释他们的答案时它会有所帮助,这样我就可以学习。还有 Roko,我没那么狡猾,form_change == true 是对的。
  • @Eckstein 不客气 :) 无论如何编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 2011-02-20
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多