不一致的 jQuery 每个() 行为与无法解释的修复

Inconsistent jQuery each() behavior with unexplainable fix

本文关键字:无法解释 jQuery 每个 不一致      更新时间:2023-09-26

我正在为基于类的CoffeeScript jQuery插件编写一个基于这个方便的模板的插件:https://gist.github.com/rjz/3610858

一切都很好。但是,当我注册插件时,最后会出现一些意外行为:

$.fn.extend markdownAsides: (option, args...) ->
  @each ->
    $this = $(this)
    data = $this.data('markdownAsides')  
    if not data?
      $this.data 'markdownAsides', (data = new MarkdownAsides(this, option))
    if typeof option is 'string'
      data[option].apply(data, args)
    data # Plugin breaks without this line

在我添加最后一行(我纯粹是偶然发现的解决方案)之前,插件的初始构造工作正常,但在连续的方法调用中,jQuery each循环有时无法遍历每个元素。

检查each循环外部的this.size()返回正确的值,检查循环外部的各个元素看起来也很好。但是在循环中,元素有时会被跳过,以一种我无法辨别的模式。

就像我说的,通过添加最后一行可以解决问题。(也许传递给each的函数的返回值以某种方式很重要?我的问题不是"我该如何解决这个问题?"而是"为什么会这样?"

从传递给each的回调函数返回 false 将脱离循环。我还没有验证,但也许 jQuery 也会破坏除 undefined 之外的任何错误值。

由于在 CoffeeScript 中有一个隐式返回,因此您可能会从回调中返回一些错误甚至错误的东西,具体取决于在其中执行的操作。

为避免任何问题,只需在最后更改data true即可。