相关疑难解决方法(0)

禁用链接以停止在JQuery中双击

button单击一次后如何禁用该类的所有链接?我希望能够在一个地方做到这一点,而不必单独改变所有这些......任何想法?

到目前为止我得到了这个:

$("a.button").click(function() { $(this).attr("disabled", "disabled"); });
$("a[disabled]").click(function() { return false; });
Run Code Online (Sandbox Code Playgroud)

但第二个事件没有解雇..

javascript jquery

36
推荐指数
4
解决办法
5万
查看次数

解决防伪令牌问题

我有一个表格帖子,一直给我一个反伪造令牌错误.

这是我的表格:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.EditorFor(m => m.Email)
    @Html.EditorFor(m => m.Birthday)
    <p>
        <input type="submit" id="Go" value="Go" />
    </p>
}
Run Code Online (Sandbox Code Playgroud)

这是我的行动方法:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Join(JoinViewModel model)
{
    //a bunch of stuff here but it doesn't matter because it's not making it here
}
Run Code Online (Sandbox Code Playgroud)

这是web.config中的machineKey:

<system.web>
  <machineKey validationKey="mykey" decryptionKey="myotherkey" validation="SHA1" decryption="AES" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

A required anti-forgery token was not supplied or was invalid.
Run Code Online (Sandbox Code Playgroud)

我已经读过,更改HttpContext上的用户会使令牌无效,但这不会发生在这里.我的Join操作上的HttpGet只返回视图:

[HttpGet]
public ActionResult Join()
{
    return this.View();
}
Run Code Online (Sandbox Code Playgroud)

所以我不确定发生了什么.我一直在搜索,似乎所有东西都表明它是机器键更改(应用程序周期)或用户/会话更改.

还有什么可以继续?我该如何解决这个问题?

asp.net-mvc antiforgerytoken asp.net-mvc-3

34
推荐指数
4
解决办法
6万
查看次数

防止多次点击按钮

我有以下jQuery代码,以防止双击按钮.它工作正常.我Page_ClientValidate()用来确保只有在页面有效时才会阻止双击.[如果存在验证错误,则不应设置标志,因为没有回发到服务器的启动]

是否有更好的方法可以防止在页面加载之前再次单击按钮?

我们isOperationInProgress = yesIndicator是否可以仅在页面导致回发到服务器时设置标志 ?是否适合event在用户第二次点击按钮之前调用它?

注意:我正在寻找一种不需要任何新API的解决方案

注意:这个问题不重复.在这里,我试图避免使用Page_ClientValidate().此外,我正在寻找一个event我可以移动代码的地方,以便我不需要使用Page_ClientValidate()

注意:我的方案中没有涉及ajax.该ASP.Net表格将被同步提交给服务器.javascript中的按钮单击事件仅用于防止双击.表单提交是使用ASP.Net同步的.

现在的代码

$(document).ready(function () {
  var noIndicator = 'No';
  var yesIndicator = 'Yes';
  var isOperationInProgress = 'No';

  $('.applicationButton').click(function (e) {
    // Prevent button from double click
    var isPageValid = Page_ClientValidate();
    if (isPageValid) {
      if (isOperationInProgress == noIndicator) {
        isOperationInProgress = yesIndicator;
      } else {
        e.preventDefault();
      }
    } 
  });
});
Run Code Online (Sandbox Code Playgroud)

参考文献:

  1. 验证器导致双击检查的不正确行为
  2. 是否使用Page_IsValid或Page_ClientValidate()(用于客户端事件)

@Peter Ivan在上述参考文献中注意到:

重复调用Page_ClientValidate()可能会导致页面过于突兀(多个警报等).

javascript jquery

33
推荐指数
7
解决办法
12万
查看次数

解决双重提交问题

我想看看Web开发人员如何避免双重提交问题.基本上我对这个问题的理解如下:

当不耐烦的用户多次提交表单时会发生双重提交,从而导致问题.这个问题可以通过JavaScript(特别是jQuery脚本)来修复,这些脚本在提交表单后禁用了提交按钮 - 这样做的一个弱点就是客户端禁用了JavaScript.

还有服务器端检测方法.

所以我的问题是:

人们如何克服双重提交?什么是双重提交引起的问题的真实例子?任何Web应用程序框架都内置了双重提交工具吗?

web-applications web-frameworks double-submit-prevention

25
推荐指数
4
解决办法
3万
查看次数

在Spring中重复表单提交

什么是避免在Spring中重复表单提交的最佳方法.此框架是否提供了处理此问题的任何特殊功能(例如,作为Struts中的Synchronizer Token)?

forms spring spring-mvc form-submit

21
推荐指数
2
解决办法
3万
查看次数

MVC5 AntiForgeryToken - 如何处理"提供的防伪令牌是为用户",但当前用户是"xxx"." 例外?

我想通过AntiforgeryToken属性来保护我们的登录操作- 我知道为什么会出现该主题的异常,但我似乎找不到任何好的解决方案.

假设我们有以下情况:

  1. 现在是上午8点,应用程序用户开始工作,他们坐下来开始登录过程 - 现在很可能某些用户将获得相同的ValidationToken.在第一个登录后 - 所有其他人在尝试登录时将看到上述异常(或其他一些自定义异常屏幕).

  2. 有些用户登录,然后意外按下" 后退 "按钮并尝试再次登录 - 虽然这种情况不太可能发生,但是我不希望用户看到例外情况.

所以问题很简单 - 如何防止上述情况,或如何处理它们以便用户不会注意到任何事情.我尝试过以下方法:

  1. 设置AntiForgeryConfig.SuppressIdentityHeuristicChecks = true; Global.asax的Application_Start中 - 它没有解决问题,我仍然得到相同的异常
  2. 使用[ValidateAntiForgeryToken]属性在方法上设置[OutputCache(NoStore = true,Duration = 0,VaryByParam ="None")] - 再次,那里没有运气

现在我正在考虑手动验证操作体中的令牌,捕获错误,并检查是否由匿名用户进行了尝试:

public ActionResult SomeAction()
{
    try
    {
        AntiForgery.Validate();
    }
    catch(HttpAntiForgeryException ex)
    {
        if(String.IsNullOrEmpty(HttpContext.User.Identity.Name))
        {
            throw;
        }
    }

    //Rest of action body here
    //..
    //..
}
Run Code Online (Sandbox Code Playgroud)

以上似乎可以防止错误 - 但它是否安全? 有什么替代品?

提前致谢.

最好的祝福.

编辑:

最终的"解决方案"是在登录表单上禁用令牌验证 - …

exception-handling antiforgerytoken asp.net-mvc-5

15
推荐指数
1
解决办法
2万
查看次数

超时时将按钮值更改回原始值(表单两次提交)

我试图通过暂时禁用“提交”按钮并将“提交”按钮的值更改为“正在处理...”来修复双重提交表单,以便用户知道发生了什么。

禁用工作onClick,“提交”值更改为“处理中...”,但是在setTimeout函数结束后,我无法将值更改回“提交” 。

有人知道我该怎么做吗?

$(function() {
  $("#submit_btn").click(function() {
    $("#submit_btn").attr("disabled", "disabled");
    this.value = "Processing...";
    setTimeout(function() {
      this.value = "Submit"; //<- this line doesn't work
      $("#submit_btn").removeAttr("disabled");
    }, 5000);
  });
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="submit_btn" type="submit" value="Submit" />
Run Code Online (Sandbox Code Playgroud)

html javascript jquery

8
推荐指数
1
解决办法
2068
查看次数

如何防止提交按钮上的双击事件

我的页面中有一个提交按钮.有时当我双击它时,双重提交显然,问题是我将信息保存在数据库中,所以我会在那里有重复的信息,我不希望这样.我尝试了一些类似下面的jquery代码,但它对我不起作用.

这里我的按钮标签是:

<input type="submit" id="btnSubmit" class="btn btn-large btn-success"    style="padding-right:40px; padding-left:40px; text-align:center;">
   
Run Code Online (Sandbox Code Playgroud)

jQuery的:

   $(document).ready(function()
   {
     $('#btnSubmit').dblclick(function()
     {
        $(this).attr('disabled',true);
        return false;
     });
    });  
Run Code Online (Sandbox Code Playgroud)

如何进一步处理?防止默认无法正常工作

$(document).ready(function () {
    alert("inside click");
    $("#btnSubmit").on('dblclick', function (event) {  

       event.preventDefault();

 });
});
Run Code Online (Sandbox Code Playgroud)

jquery button

7
推荐指数
2
解决办法
3万
查看次数

单击以防止重复提交时,如何禁用Drupal表单提交按钮?

听起来像一个简单的问题。我添加了一些jQuery魔术:

$("#edit-save").click(function(event) {
  $(this).attr("disabled", "true");
});
Run Code Online (Sandbox Code Playgroud)

但是,一旦到位,就不会调用我的表单提交处理程序。

这是我在hook_menu中定义的路径上的自定义表单:

$items['my_form'] = array(
  'title' => 'My form',
  'page callback' => 'drupal_get_form',
  'page arguments' => array('mymod_myform'),
  'type' => MENU_CALLBACK,
);
Run Code Online (Sandbox Code Playgroud)

在表单中,我有一个提交按钮和一个取消按钮:

$form['cancel'] = array(
  '#type' => 'submit',
  '#value' => t('Cancel'),
);

$form['save'] = array(
  '#type' => 'submit',
  '#value' => t('Save'),
);
Run Code Online (Sandbox Code Playgroud)

我定义了自己的提交处理程序:

$form['#submit'][] = 'mymod_myform_submit';
Run Code Online (Sandbox Code Playgroud)

我在drupal_get_form()函数中放置了一些跟踪代码,以在提交表单时嗅探$ _POST变量。禁用jQuery magic时,$ _POST变量包含一个“ op”参数:

Array
  (
    [op] = Save
    [form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
    [form_token] => 33db6e34c0350e33c48861a63a38d45f
    [form_id] => dh_seo_workload_item_form
  )
Run Code Online (Sandbox Code Playgroud)

但是,如果我启用了jQuery Magic,可以在单击后禁用提交按钮,则$ _POST数组中将不再包含“ op”参数,因此Drupal认为该表单尚未提交。

我已经在jQuery避免了表单的双重提交 …

jquery drupal drupal-fapi

6
推荐指数
1
解决办法
7528
查看次数

启用 ASP.Net Core 会话锁定?

根据 ASP.Net Core docs,会话状态的行为已经改变,因为它现在是非锁定的:

会话状态是非锁定的。如果两个请求同时尝试修改会话的内容,最后一个请求会覆盖第一个请求。Session 是作为一个连贯的 session 来实现的,这意味着所有的内容都存储在一起。当两个请求试图修改不同的会话值时,最后一个请求可能会覆盖第一个请求所做的会话更改。

我的理解是,这与 .Net Framework 中会话的行为不同,其中用户的会话根据请求被锁定,因此无论何时读取/写入它,您都不会覆盖另一个请求的数据或读取过时的数据,对于该用户。

我的问题:

  1. 有没有办法在 .Net Core 中重新启用用户会话的每个请求锁定?

  2. 如果没有,是否有可靠的方法来使用会话来防止给定用户重复提交数据?举一个具体的例子,我们有一个支付流程,该流程涉及用户从外部托管的 ThreeDSecure (3DS) iFrame(支付卡安全流程)返回。我们注意到有时(以某种方式)用户在 iFrame 中多次提交表单,我们无法控制。因此,这会触发对我们应用程序的多个回调。在我们之前的 .Net Framework 应用程序中,我们使用会话来指示付款是否正在进行中。如果在会话中设置了此标志并且您再次点击 3DS 回调,应用程序将阻止您继续。然而,现在似乎因为会话没有被锁定,当这些几乎同时发生的重复回调发生时,线程 'A' 设置 '

既然会话的工作方式发生了变化,那么处理访问同一会话的同时请求有哪些好方法?

.net c# asp.net .net-core asp.net-core

4
推荐指数
1
解决办法
1892
查看次数