【问题标题】:Jquery .on('click,'button' not workingJquery .on('点击,'按钮'不起作用
【发布时间】:2014-04-10 12:24:32
【问题描述】:

我需要检查用户是否关闭了浏览器。没有可靠的方法,但最准确的方法似乎是使用onbeforeunload 并检查是否单击了链接或按钮。我还将添加 f5 和其他一些额外的检查。

但我的按钮有问题。如果我点击按钮,即使有if(window.link_was_clicked==false)条件也会进行ajax调用。

<button onclick="setLocation('http://dev.site.com/checkout/')" class="button" title="Checkout" type="button"><span><span>Checkout</span></span></button>

还有脚本:

jQuery(document).on('click', 'button', function(event) {
  window.link_was_clicked= true;
});  

window.onbeforeunload = function() {
  if(window.link_was_clicked==false){                
    //make ajax call      
  }
};

问题似乎是因为按钮onclick 附加了setLocation 函数。有没有办法先触发jQuery(document).on

【问题讨论】:

  • 你说的是哪个按钮?你说的是浏览器关闭按钮吗?
  • 您的 HTML 在哪里?如果你没有使用&lt;button&gt; 标签,那么你的 jQuery 不会选择任何东西。
  • 你的 HTML 太稀疏了。
  • @Sushil 我说的是

标签: javascript jquery


【解决方案1】:

加载前该变量不存在。所以把它添加到顶部再试一次

     window.link_was_clicked=window.link_was_clicked||false;
     jQuery(document).on('click', 'button', function(event) {
         window.link_was_clicked= true;
      });  

     window.onbeforeunload = function() {
         if(window.link_was_clicked==false){                
        //make ajax call      
     }
    };

【讨论】:

  • 在实际代码中它是window.link_was_clicked= false;,我只是想让示例简短易懂。所以这不是问题。
【解决方案2】:

由于您没有提供setLocation() 的代码,我认为这就是问题所在。现在,关于更改单击事件处理程序的执行顺序:

同时嵌入onclick 和jquery-bound 处理程序通常是不好的,它会导致各种混乱。但是,如果您无法更改 html,则可以按照此人的建议进行操作:https://stackoverflow.com/a/7507888/2685386

$(document).ready(function() {
    var myClick = $('button').attr('onclick');
    $('button').removeAttr('onclick');

    $(document).on('click', 'button', function(e) {
        window.link_was_clicked=true;
        // do my other stuff here....
        eval(myClick);// this will now call setLocation()
    });
});

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 2014-09-09
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多