1

我的网站上的 jQuery Confirm 代码一直有一个非常奇怪的问题。我一直在使用 Nadia Alramli 设计的插件(http://nadiana.com/jquery-confirm-plugin

这个插件停止它所应用的元素的动作,并首先提供一个确认对话框。我将它用于我开发的资金申请管理系统上的“操作按钮”。直到最近,一切都运行良好,从字面上看,出乎意料的是,代码刚刚停止工作。确认对话框显示,但是当您单击“是”时,按钮的操作不会执行。

我检查并重新检查了代码,与最初实现的方式相比没有任何改变。我还创建了一个示例页面,在其中删除了所有其他不必要的代码,但我仍然遇到同样的问题。这是我的示例页面的链接:http: //www.greeleyw2w.org/admin/example2.html

什么可能导致这样的事情?我唯一能想到的要么是我的网络主机 (GoDaddy) 的问题,要么是 Google 托管的 jQuery 版本的问题。

//Actions for the status change buttons
$(document).ready(function(){
$("#test").click(function(){ //The action of the button
    alert("You confirmed the button click.");
});

$('.confirm').confirm({ //Captures button action, asks for confirmation.
    msg:'Are you sure?',
    wrapper:'<span style="color:#099"></span>',
    dialogShow:'fadeIn',
    dialogSpeed:'slow',
    buttons: {
        wrapper:'<button></button>',
        separator:'  '
    }
});
});
4

4 回答 4

4

它与 JQuery 1.8 不兼容。

在第 43 行左右,将代码更改为:

var events = jQuery.data(target, 'events');

var events = jQuery._data(target, "events");

由于移除了 api,事件模型在 1.8 中中断。

http://blog.jquery.com/2012/08/09/jquery-1-8-release

于 2012-12-04T01:41:12.063 回答
0

on jquery confirm replace the code with this:

/**
 * Confirm plugin 1.3
 *
 * Copyright (c) 2007 Nadia Alramli (http://nadiana.com/)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 */

/**
 * For more docs and examples visit:
 * http://nadiana.com/jquery-confirm-plugin
 * For comments, suggestions or bug reporting,
 * email me at: http://nadiana.com/contact/
 */

jQuery.fn.confirm = function(options) {
  options = jQuery.extend({
    msg: 'Are you sure?',
    stopAfter: 'never',
    wrapper: '<span></span>',
    eventType: 'click',
    dialogShow: 'show',
    dialogSpeed: '',
    timeout: 0
  }, options);
  options.stopAfter = options.stopAfter.toLowerCase();
  if (!options.stopAfter in ['never', 'once', 'ok', 'cancel']) {
    options.stopAfter = 'never';
  }
  options.buttons = jQuery.extend({
    ok: 'Yes',
    cancel: 'No',
    wrapper:'<a href="#"></a>',
    separator: '/'
  }, options.buttons);

  // Shortcut to eventType.
  var type = options.eventType;

  return this.each(function() {
    var target = this;
    var $target = jQuery(target);
    var timer;
    var saveHandlers = function() {
      var events = jQuery.data(target, 'events');
      if (!events && target.href) {
        // No handlers but we have href
        $target.bind('click', function() {document.location = target.href});
        events = jQuery.data(target, 'events');
      } else if (!events) {
        // There are no handlers to save.
        return;
      }
      target._handlers = new Array();
      for (var i in events[type]) {
        target._handlers.push(events[type][i]);
      }
    }

    // Create ok button, and bind in to a click handler.
    var $ok = jQuery(options.buttons.wrapper)
      .append(options.buttons.ok)
      .click(function() {
      // Check if timeout is set.
      if (options.timeout != 0) {
        clearTimeout(timer);
      }
      $target.unbind(type, handler);
      $target.show();
      $dialog.hide();
      // Rebind the saved handlers.
      if (target._handlers != undefined) {
        jQuery.each(target._handlers, function() {
          $target.click(this.handler);
        });
      }
      // Trigger click event.
      $target.click();
      if (options.stopAfter != 'ok' && options.stopAfter != 'once') {
        $target.unbind(type);
        // Rebind the confirmation handler.
        $target.one(type, handler);
      }
      alert("You confirmed the button click.");
      return false;
    })

    var $cancel = jQuery(options.buttons.wrapper).append(options.buttons.cancel).click(function() {
      // Check if timeout is set.
      if (options.timeout != 0) {
        clearTimeout(timer);
      }
      if (options.stopAfter != 'cancel' && options.stopAfter != 'once') {
        $target.one(type, handler);
      }
      $target.show();
      $dialog.hide();
      return false;
    });

    if (options.buttons.cls) {
      $ok.addClass(options.buttons.cls);
      $cancel.addClass(options.buttons.cls);
    }

    var $dialog = jQuery(options.wrapper)
    .append(options.msg)
    .append($ok)
    .append(options.buttons.separator)
    .append($cancel);

    var handler = function() {
      jQuery(this).hide();

      // Do this check because of a jQuery bug
      if (options.dialogShow != 'show') {
        $dialog.hide();
      }

      $dialog.insertBefore(this);
      // Display the dialog.
      $dialog[options.dialogShow](options.dialogSpeed);
      if (options.timeout != 0) {
        // Set timeout
        clearTimeout(timer);
        timer = setTimeout(function() {$cancel.click(); $target.one(type, handler);}, options.timeout);
      }
      return false;
    };

    saveHandlers();
    $target.unbind(type);
    target._confirm = handler
    target._confirmEvent = type;
    $target.one(type, handler);
  });
}
于 2012-10-17T04:43:32.350 回答
0

尝试更改您的代码

$('.confirm').confirm({
   ....
});

$('#test').confirm({
   ....
});
于 2012-10-17T04:26:41.073 回答
0

我认为您错过了“是”按钮上的 ID。这是您的代码:

<span style="color: rgb(0, 153, 153); display: none;">
Are you sure?
<button>Yes</button>
<button>No</button>
</span>
<input id="test" class="confirm" type="button" style="display: inline;" value="Test Confirm Function" />

因此,通过将 ID 属性添加到 Yes Button 来更改您的 HTML 代码。看看下面修改后的代码:

<span style="color: rgb(0, 153, 153); display: none;">
Are you sure?
<button id="test">Yes</button>
<button>No</button>
</span>
<input class="confirm" type="button" style="display: inline;" value="Test Confirm Function" />

或者您可以将您的 javascript 操作部分更改为:

$('button').click(function(){
  alert("You confirmed the button click."); 
});

查看“第二个示例”的插件文档,它与您的情况类似。

于 2012-10-17T04:28:46.447 回答