jQuery更改事件未更新

Posted

技术标签:

【中文标题】jQuery更改事件未更新【英文标题】:jQuery change event not updating 【发布时间】:2013-06-22 19:47:04 【问题描述】:

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

【问题讨论】:

解开代码$(function () ,这相当于.ready,它不应该与JQM一起使用,除了它会触发一次。 【参考方案1】:

当然,它的行为符合预期。您在选择更改时更改 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

【讨论】:

@Omar 谢谢,你对这个问题的原始评论也很好理解.. :) 我解开了代码,所以它现在只在 男人不确定发生了什么,在那小提琴上我反复收到此错误“未捕获的 ReferenceError:disableSelectedOption 未定义” PSL 人,太棒了。非常感谢你和@Omar,我唯一的问题是为什么 Omar 声明将它从函数中解包出来(它不能在准备好的文档上工作)并且你把它放在 $(function()) ;它有效吗? @DirtyBirdDesign 欢迎您。我相信@omar 的评论是正确的。为了让它在小提琴和桌面上工作,我相信需要 document.ready 这就是为什么它不能在小提琴中工作。我假设移动 paginit 会被触发(虽然我没有太多使用 jquery mobile 的 exp)。但是看到这个网址***.com/questions/14468659/…

以上是关于jQuery更改事件未更新的主要内容,如果未能解决你的问题,请参考以下文章

触发更改事件后,Kendo Observable 未更新

<select> 上的 jQuery 更改事件未在 IE 中触发

输入未更改时观察者未触发更新事件 - Laravel

jQuery更改处理程序未触发[重复]

在 jQuery 中触发 CSS 类更改的事件

WebDriver:更改事件未触发