fn.toggle(handler(eventObject),handler(eventObject)...)哪里去了?

时间:2013-01-13 08:38:26

标签: jquery deprecated

我有this jsfiddle

使用toggle event - 不要被toggle所限制 - jQuery版本设置为 EDGE

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

我找不到任何弃用标签或

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

如果我添加Migrate模块jsFiddle then works,我会在控制台中看到警告(由https://github.com/jquery/jquery-migrate/blob/master/warnings.md详细说明,由FrédéricHamidi发布)

我看到Deprecate fn toggleissue 24以及Ticket #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());
      }
    });
  }    
);

MIGRATE中的代码:

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 个答案:

答案 0 :(得分:13)

现在在api.jquery.com记录了jquery .toggle()的弃用。 我在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,没有传入args。

答案 1 :(得分:8)

您可以在toggle()'s deprecation中找到有关the list of warnings emitted by the jQuery Migrate plugin的官方文档:

  

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

     

原因: .toggle()有两种截然不同的含义   方法。使用.toggle()来显示或隐藏元素不受影响。   不推荐使用.toggle()作为专门的点击处理程序   1.8并在1.9中删除。

     

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

答案 2 :(得分:2)

jQuery 1.9尚未最终确定。根据升级指南:

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

在这种情况下,我们还没有记录它。你们这些人比我们快!请在此处提交文件凭证:http://github.com/jquery/api.jquery.com

答案 3 :(得分: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...
        }
    });