21

我有这个jsfiddle

它使用切换事件- 不要与切换混淆- jQuery 版本设置为EDGE

它突然停止工作并删除了我想要作为触发器的单元格,因为它显然恢复为toggle

我找不到任何弃用标签等

http://api.jquery.com/category/deprecated/给出 404

如果我添加Migrate模块,我的jsFiddle 就会工作,我会在控制台中看到警告(由 Frédéric Hamidi 发布的https://github.com/jquery/jquery-migrate/blob/master/warnings.md详细阐述)

我看到了Deprecate fn toggleissue 24Ticket #11786,但在我希望看到的地方没有。

我错过了什么,我在哪里可以找到它的替代品和文档?

注意:我了解弃用的原因,我只是找不到弃用的官方文档

$('#tbl .xx').toggle(
  function() {
    $(this).siblings().each(function(){
      var t = $(this).text();
      $(this).html($('<input />',{'value' : t}));
    });
  },
  function() {
    $(this).siblings().each(function(){
      var inp = $(this).find('input');
      if (inp.length){
        $(this).text(inp.val());
      }
    });
  }    
);

迁移中的代码:

jQuery.fn.toggle = function( fn, fn2 ) {
  // Don't mess with animation or css toggles
  if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
    return oldToggle.apply( this, arguments );
  }
  migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
  // Save reference to arguments for access in closure
  var args = arguments,
  guid = fn.guid || jQuery.guid++,
  i = 0,
  toggler = function( event ) {
    // Figure out which function to execute
    var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
    jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
    // Make sure that clicks stop
    event.preventDefault();
    // and execute the function
    return args[ lastToggle ].apply( this, arguments ) || false;
  };
  // link all the functions, so any of them can unbind this click handler
  toggler.guid = guid;
  while ( i < args.length ) {
    args[ i++ ].guid = guid;
  }
  return this.click( toggler );
};

更新我问他们是否可以将代码保留为 fn.toggler 所以它是重命名而不是删除

4

4 回答 4

14

jquery .toggle() 的弃用现在记录在api.jquery.com。我在我现在使用的forum.jquery找到了一个很好的替代品。它工作得很好:)

$.fn.toggleClick = function() {
  var functions = arguments,
      iteration = 0;
  return this.click(function() {
    functions[iteration].call();
    iteration = (iteration + 1) % functions.length;
  });
}

用法:

$("#target").toggleClick(function() {
  alert( "First handler for .toggle() called." );
}, function() {
  alert( "Second handler for .toggle() called." );
});

2014 年 8 月 6 日编辑:我重新考虑了原始代码,发现 .apply 不适合使用。将其更改为 .call 且未传入任何参数。

于 2014-08-06T00:14:37.880 回答
9

您可以在 jQuery Migrate 插件发出的警告列表中找到有关toggle()弃用的官方文档:

JQMIGRATE:不推荐使用 jQuery.fn.toggle(handler, handler...)

原因:该方法有两种完全不同的含义.toggle() 。显示或隐藏元素的使用.toggle()不受影响。在 1.8 中已弃用.toggle()作为专用点击处理程序的使用,并在 1.9 中删除。

解决方案:重写依赖的代码$().toggle(),使用 jQuery Migrate 插件的缩小生产版本提供功能,或者$().toggle()从插件源中提取方法并在应用程序中使用。

于 2013-01-13T10:05:28.367 回答
2

jQuery 1.9 还不是最终版本。根据升级指南:

“目前,本指南作为标准 jQuery API 文档的附录,这些页面可能无法描述 1.9 版的行为。请耐心等待我们更新 api.jquery.com 上各个页面的文档以反映1.9 的变化。”

在这种情况下,我们只是还没有记录它。你们这样的人比我们快!请在此处提交文档票:http: //github.com/jquery/api.jquery.com

于 2013-01-13T14:34:26.117 回答
1

我使用的代码:

$('#example').click(function()
    {
    isClicked=$(this).data('clicked');
    if (isClicked) {isClicked=false;} else {isClicked=true;}
    $(this).data('clicked',isClicked);

    if(isClicked)
        {
        ...do stuff...
        }
    else
        {
        ...do stuff...
        }
    });

优化后的代码(mplungjan 建议)是:

$('#example').click(function()
    {
    $(this).data('clicked',!$(this).data('clicked'));

    if ($(this).data('clicked'))
        {
        ...do stuff...
        }
    else
        {
        ...do stuff...
        }
    });
于 2013-05-22T21:35:55.843 回答