0

++++++++++更新++++++++++++++++

在进一步的测试中,我发现有几次 attr 方法无法设置属性。我更改了以下代码行以使事情变得简单:

$(this).attr('name', 'yahoo');

afterRemoveCurrent触发事件后,我应该console.log$(this)上面的代码行上执行,令我惊讶的是,该属性没有更改为yahoo. 我重复了几次,观察到属性有几次改变了,其他时候没有。我曾经setTimeout将整个函数的执行延迟afterRemoveCurrent500 毫秒,但结果仍然相同。这有帮助吗?

++++++++++更新内容结束+++++++++++++++++++++++++

我有一小段代码没有按预期工作。我正在使用一个名为sheepit http://www.mdelrosso.com/sheepit/index.php?lng=en_GB的插件(允许您添加多个表单字段):

该页面的实时版本可以在这里看到:

i此语句中的 the$(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);有时会被错误地评估。更加具体:

以下 2 个语句(每个循环)中的变量i应该相同:

$(this).attr('data-index', i);
$(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);

但不知何故,当值i0第一个语句中时,它是1或第二个语句中的某个其他数字。

var sheepItForm = $('#sheepItForm').sheepIt({
    separator: '',
    allowRemoveLast: false,
    allowRemoveCurrent: true,
    allowAdd: true,
    maxFormsCount: 8,
    minFormsCount: 1,
    iniFormsCount: 0,
    pregeneratedForms: ['pregenerated_form_1'],
    afterRemoveCurrent: function(source) {
        var i = 0;
        $('select.children').each(function() {
            $(this).attr('data-index', i);
            $(this).parent().find('select.child-age-option').each(function() {
                var arr = $(this).attr('name').split('.');
                $(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);
            });
            i++;
        });
    }
});
4

2 回答 2

1

使用闭包:

afterRemoveCurrent: function(source) {
    (function(i) {
        $('select.children').each(function() {
            $(this).attr('data-index', i);
            $(this).parent().find('select.child-age-option').each(function() {
                var arr = $(this).attr('name').split('.');
                $(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);
            });
            i++;
        });
    })(0);
}
于 2013-10-31T12:03:03.940 回答
0

尝试这个

var sheepItForm = $('#sheepItForm').sheepIt({
    separator: '',
    allowRemoveLast: false,
    allowRemoveCurrent: true,
    allowAdd: true,
    maxFormsCount: 8,
    minFormsCount: 1,
    iniFormsCount: 0,
    pregeneratedForms: ['pregenerated_form_1'],
    afterRemoveCurrent: function(source) {
        $('select.children').each(function(i) {
            $(this).attr('data-index', i);
            $(this).parent().find('select.child-age-option').each(function() {
                var arr = $(this).attr('name').split('.');
                $(this).attr('name', 'rooms[' + i + ']' + '.' + arr[1] + '.' + arr[2]);
            });
        });
    }
});
于 2013-10-31T12:02:55.247 回答