0

使用 jQuery 1.9.1 和 jQuery Mobile 1.3

我有一些由选择列表和文本输入组成的克隆表单元素。我需要文本输入的名称和 id 属性来更改和反映选择列表中所选项目的值。这最初适用于第一组选择列表/文本输入,但在您再次更改选择列表时无效。它也不适用于克隆的元素。

http://jsfiddle.net/mT4vw/

$(function(){
    $('form').on('change', '.mySelect', function(){
        var value = $(this).val();
        $(this).nextAll('.ui-input-search').find('#search').attr({name:value, id:value});
     });
});

也试过这个:

$(function(){
    $('.mySelect').on('change', function(){
        var value = $(this).val();
        $('.mySelect').each(function(){
            $(this).nextAll('.ui-input-search').find('#search').attr({name:value, id:value});
        });
    });
});

总而言之,每次切换选择列表时,我都需要进行这项工作,仅到下一个文本输入。我需要它来处理初始选择列表/文本输入以及克隆实例。有没有比克隆更好的方法(代码在 jsfiddle 中)?我喜欢这种方法,因为它会禁用选择列表中任何先前选择的选项。谢谢你。

4

1 回答 1

3

当然,它的行为符合预期。您在选择更改时更改 id,然后在下一次更改时尝试使用不再存在的旧 id 进行检索。Insetad,您可以使用 className 或data-type=search在选择器中使用。

像这样:

$(this).nextAll('.ui-input-search').find('[data-type=search]').attr({name:value, id:value});

或者:更改您的标记以添加一个类说searchBox

 <input type="search" name="" id="search" class="inline searchBox" value="" placeholder="Search" data-theme="d" data-inline="true">

然后使用该类选择它,该类在您的情况下不是变量,不像名称/ID

$(this).nextAll('.ui-input-search').find('.searchBox').attr({name:value, id:value});

小提琴

于 2013-06-25T20:48:33.127 回答