2015-12-30 33 views
2

我想要使用以下脚本来检测表单中的任何字段是否已更改(编辑:检测我的表单字段的值是否已更改),并提醒用户是否所以。否则,会显示另一个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(); 
     } 
    }); 
+0

“检测是否在我的表格的任何字段已经改变了” ......从什么到什么? –

+0

对不起,检测我的任何表单域的值是否已更改。 – Eckstein

+0

那么什么是#eventMedia?在表单被填入后是否被点击?如果是这种情况,那么在点击元素后如何检测键控或以前做出的更改。您需要将它们绑定到click方法的外部。 – epascarello

回答

3

你开始只登记一次#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 ...


现在回想起你的UI ......我有一个问题。 “为什么?”。是的,为什么要显示“保存”或其他什么#eventMedia如果用户没有更改表单中的任何内容?我的意思是,如果用户做了任何改变,而没有理由做任何事情 - 对吗?

这应该足够了,我认为:

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

您可以删除'form_changed == true'。 'if(form_changed)'就足够了。 @ roko-c-buljan – KostasX

+0

@KostasX当然,但这完全在OP上。有时候,棘手的程序员重新使用相同的变量来分配不同的类型值。 –

+0

是的,当然,但你已经改变了OP代码!这也会使代码更好一些。 – KostasX