如何通过事件 increment/decrement 对象 属性 值?

How to increment/decrement an objects property value with an event?

我正在尝试为 jQuery-ui 使用手风琴小部件。我正在尝试 build 的是一个可以通过轻扫循环浏览所有选项卡的功能。为了这个例子,我使用了一个点击事件,因为我有滑动 up/down 事件侦听器单独工作并且与我的问题无关。本质上,用户将滑动或单击一个区域,然后选项卡将来回循环 3 个部分。

我走在正确的轨道上还是有更好的方法来完成这个?

jsFiddle demo

JS

$(function () {
    $("#accordion").accordion({
        collapsible: true,
        active: false
    });
});


$('#cycle').click(function () {

    $('#accordion').accordion({
        active: 0
    });

    function incrementAccValue(obj, val) {
        obj = $('#accordion').accordion({
            active: val
        });

        obj.active++ //stuck here..?
       
    }

});

//How to increment an object's property value?

你走在正确的轨道上。您只需要将活动数字存储在点击功能范围之外,以便该值在下一次点击事件中可用。

像这样的东西应该可以工作:http://jsfiddle.net/30vm5y75/

var max_items = $('#accordion h3').length;
var current_item = 0;

$('#cycle').click(function () {

    $('#accordion').accordion({
        active: current_item
    });

    if (current_item < max_items-1) {
        current_item = current_item + 1;
    } else {
         current_item = 0;   
    }

});

不确定这是否是您需要的,但我已经更新了您的 fiddle here

更新的 JS:

var activeIndex = 0,
    maxIndex = $("#accordion h3").length - 1;

$(function () {
    $("#accordion").accordion({
        collapsible: true,
        active: false
    });
});

$('#cycle').click(function () {

    $('#accordion').accordion({
        active: activeIndex
    });

    activeIndex = ( activeIndex == maxIndex ? 0 : activeIndex+1);

});   

来自文档:

// Getter
var active = $( ".selector" ).accordion("option", "active" );

// Setter
$( ".selector" ).accordion( "option", "active", 2);

因此,您不必将当前索引存储在任何地方;只需获取活动索引,然后将活动索引设置为active + 1或手风琴的长度减一,以较小者为准。