【问题标题】:ASP.NET mvc detect clientside changesASP.NET mvc 检测客户端更改
【发布时间】:2011-12-29 08:09:56
【问题描述】:

在我的应用程序中,我希望客户在未更改特定表单中的值时不要按提交。我可以在服务器端执行此操作并将 viewmodelerror 添加到模型状态。但是有没有办法用javascript在客户端做到这一点?我搜索了它,但找不到它。

【问题讨论】:

  • 您想仅在值发生更改时启用提交按钮吗??
  • 是的,如果可能的话。如果可以检测到用户已还原更改,那也很好,但我可以想象那是不可能的。
  • 我不认为这是不可能的......这是他们喜欢做这些事情的方式......你所需要的只是检测客户端更改然后打开提交按钮的javascript函数上

标签: c# javascript forms asp.net-mvc-3


【解决方案1】:

不知道你在问什么?您是在谈论客户端验证吗?在这种情况下,您可以使用 MVC Validation 或 jquery 之类的 javascript 库并使用 validation plugin

【讨论】:

  • 我不是在谈论验证。我只想知道页面加载和页面提交之间的表单值是否发生了变化。
  • 如果您想确定确切的值更改,则需要在 javascript 中构建更改检测,或者您可以为每个输入添加一个类并将更改事件绑定到该类的所有元素设置一个隐藏字段,指示值已更改。
【解决方案2】:

如果表单被编辑,您可以设置一个 javascript 变量。 一个简单的方法是在输入字段上监听 change 事件:

var isChanged = false;
$('input,select,textarea').change(function() {
  isChanged = true;
});

然后在提交前检查isChanged

但这种方法不处理将值更改回原始值的问题。

如果您需要解决这种情况,您需要将表单状态保存在 javascript 对象中并与之进行比较。

如果表单发生更改,您可以添加它以避免用户离开页面:

$(window).bind('beforeunload', function() { 
  if (isChanged) {
    return 'You have changed the form, are you sure?';
  } else {
    return undefined;
  }
});

【讨论】:

  • 这是一个开始。它至少让我有可能在回发之前给用户一些反馈。然后服务器端我可以检查用户是否真的改变了任何东西,或者用户是否没有改变。
  • 我刚刚添加了另一个通常与此类问题相关的建议。
  • 如果您在离开页面之前检查更改会出现一个问题,那么当您单击表单上的保存时也会提示您。如何覆盖表单提交的此行为,而不是单击链接或关闭选项卡...
  • 上面的.change() 处理程序需要调整才能正常工作:在最后一个大括号} 之后关闭)
【解决方案3】:

客户应该改变什么?

例如,如果。它只是一个文本字段的值,您可以将原始值保存在文档就绪 jquery 事件中,并在点击提交按钮时运行一个 javascript 函数来检查值是否已更改。

如果您有更复杂的输入字段,您仍然可以使用此机制保存原始内容并通过 javascript 检查提交。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2010-09-14
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多