javascript - 捕获自动更改元素的属性更改

标签 javascript jquery html

我想在我的网页上创建两个选择,这两个选择将相互连接,以便两个选择始终相同。让我用一个模拟示例来解释一下:

我有一个包含两个选择的网页:

<select class="myselector">
    <option value='1'>1
        <br>
    </option>
    <option value='2'>2
        <br>
    </option>
</select>
<select class="myselector">
    <option value='1'>1
        <br>
    </option>
    <option value='2'>2
        <br>
    </option>
</select>

注意:实际上,我不仅仅有两个选择,而且我希望将它们全部连接起来。

现在,我希望网页在第一个选择器发生更改时自动将第二个选择器设置为第一个选择器的值。我还想对已更改的选择执行一些其他操作,因此我也希望更改事件在其他选择器上触发。我的第一个想法就是这样做:

function valChange() {
    myfun();
    $('.myselector').val($(this).val());
}
$('.myselector').on('change', valChange);
  • 这满足了我的需要,它更改了选定的值,使它们匹配
  • 这不会触发其他选择中的更改事件,因此 myfun 仅运行一次

我的下一个想法是将 $('.myselector').change(); 添加到 valChange 函数的末尾,但这(自然)会导致变化事件的无限循环。

因此,我的问题是:

How can I trigger the change event in only the elements that have been changed automatically (not by a user)?

我认为可以通过同时进行更改和点击事件来完成,但这对我来说似乎是错误且丑陋的。

<小时/>

编辑:我找到了一种通过使用 jquery 选择器来解决我的问题的方法。如果存在更优雅的方法来解决问题,我仍然会很高兴看到它。

function valChange() {
    myfun()
    var others = $('.myselector[value!=' + $(this).val() + ']');
    others.val($(this).val());
    others.change();
}

$('.myselector').on('change', valChange);

JSfiddle 我的解决方案:

http://jsfiddle.net/5xum/svjbdxgs/

最佳答案

你可以使用jquery的每个方法

function valChange() {
     var _this = $(this)
     $('.myselector').each(function(){
          myFun();
          $(this).val(_this.val());
     });
}
$('.myselector').on('change', valChange);

这里是同样的 fiddle fiddle link

关于javascript - 捕获自动更改元素的属性更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25617339/

相关文章:

javascript - 如何选择列表中的当前元素

php - 在表单中添加 Action 变量

javascript - 如何在 Controller 中保留 html 中的变量?

javascript - 仅将 AJAX 响应传递给数组中的当前 div

jquery - 我们怎样才能像 AngularJS 那样用 ng-repeat 重复 jquery 中的表格行?

jquery - JSFiddle 上的代码在浏览器中不起作用

javascript - 如何使用 JavaScript 动态调整 SVG 中文本元素的高度和宽度

javascript - 在创建 div 时执行某些操作而不知道创建它的事件 (javascript)

php - Bootstrap jumbotron 自动根据内容量改变大小

javascript - 如何将javascript变量添加到div?