【问题标题】:Error with JQuery 1.9.1 and Knockout fadeOut()JQuery 1.9.1 和 Knockout fadeOut() 出错
【发布时间】:2013-11-18 23:29:05
【问题描述】:

在 StackOverflow 上找到了 similar issue,但这对我的情况没有帮助。

我有一个 Knockout 3.0(JQuery 行为与 KO 2.3 相同)和 Jquery 1.9.1 应用程序,我试图淡出一个元素,但我一直收到“未捕获的 TypeError:无法设置属性 'cur'的未定义”。我可以将小提琴更改为使用 JQuery 1.8.3 或 JQuery 2.0.2,它会起作用。

这是模板/视图代码:

<div id="cart">
<ul data-bind="foreach: { data: myItems, beforeRemove: fadeIt}">
    <li><span data-bind="text: $data"></span>  <a href="#" data-bind="click: $root.deleteItem">X</a>

    </li>
</ul>
<button data-bind="click: addItem">Add</button>

这是 Knockout ViewModel:

function CartViewModel() {
var self = this;

self.myItems = ko.observableArray(['A', 'B', 'C']);

self.fadeIt = function (element, index, data) {
    $(element).fadeOut();
};

self.addItem = function () {
    self.myItems.push('New item');
};

self.deleteItem = function (item) {
    self.myItems.remove(item);
};

}

var vm = new CartViewModel();
ko.applyBindings(vm, document.getElementById("cart"));

我创建了一个JSFIDDLE 来演示这种行为。

寻找一些创造性的解决方法

我已经尝试过的一些事情:

  • 在 *$el.css({opacity: 1, display: 'block'}).animate({opacity: 0}) 上使用 JQuery animate,但同样的错误失败

    李>
  • 我已尝试放入 $.delay() 以查看是否可以将 fadeOut() 推迟到未来的帧

感谢您的任何建议。理想情况下,我们不会切换到 JQuery 2.0+

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

    好吧,看来这个元素不是你真正想的那样,我看着 $(element) 它不是 li 元素,这在你的情况下是个问题

    $(element).next().fadeOut();

    似乎有效,但我敢打赌,您需要一种更具体的方法来实现这一目标

    更新小提琴http://jsfiddle.net/qTvs9/1/

    【讨论】:

    • 我已经尝试过兄弟()、父()等。我认为部分问题是 Knockout 在那里留下了一些模板 DOM?但是当我在Chrome 调试器,它已附加到正确的项目。
    • 当我尝试在您的代码中删除“A”时,它会同时删除“A”和“B”,顺便说一句。虽然当我在调试代码中检查 $(e).next() 时,它似乎显示了正确的元素。
    • @taudep 是的,这可能是由于 $(element).next().fadeOut() 没有真正捕获正确的元素更新小提琴:jsfiddle.net/qTvs9/2 这不依赖于淡入淡出它(它在删除中执行)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2012-01-03
    • 2013-11-28
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多