jQuery更改事件未更新

时间:2013-06-25 20:37:32

标签: jquery dom jquery-mobile

使用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中)?我喜欢这种方法,因为它禁用了选择列表中任何以前选择的选项。谢谢。

1 个答案:

答案 0 :(得分: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});

<强> Fiddle