V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
piaochen0
V2EX  ›  JavaScript

关于 checkbox 状态变化监听的问题

  •  
  •   piaochen0 · 2019-11-05 09:45:57 +08:00 · 5248 次点击
    这是一个创建于 1849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    表单中有一个 checkbox,id 为 cb_test 监听代码如下:
    '''
    $('#cb_test').change(function() {
    console.log('test change');
    console.log($(this).prop("checked"));
    });

    $('input[data-cb-type="item"]').change(function() {
    console.log('item change');
    console.log($(this).prop("checked"));
    });
    '''
    点击 checkbox,这两个监听都会触发。 但是我的需求是:在 js 代码中,修改 checkbox 的状态, $('#cb_test').prop("checked", true);
    这个时候能不能触发 change 事件? 试了好久都不行。还问各位有什么方法能触发的?

    9 条回复    2019-11-05 12:47:05 +08:00
    yxcoder
        1
    yxcoder  
       2019-11-05 09:51:17 +08:00
    trigger?抱歉我没弄懂你想表达什么
    mcfog
        2
    mcfog  
       2019-11-05 09:53:07 +08:00 via Android
    怀念一下,这感觉像是十年前前端讨论的问题,jquery 还不分 attr 和 prop 做各种魔法的时候
    yesterdaysun
        3
    yesterdaysun  
       2019-11-05 09:56:07 +08:00   ❤️ 1
    google 了一阵, 没有发现背后的原理, 可能设计上 prop 就是不触发 change 事件的, 确实有点意外, 可能有别的事件对应?

    不过有一些 workaround, 比如这样写, $('#cb_test').prop("checked", true).change()就可以触发 change 了

    https://stackoverflow.com/questions/24410581/changing-prop-using-jquery-does-not-trigger-change-event
    https://forum.jquery.com/topic/should-chk-prop-checked-true-trigger-change-event
    piaochen0
        4
    piaochen0  
    OP
       2019-11-05 09:56:38 +08:00
    @yxcoder 代码中修改 checkbox 的状态,如何监听 checkbox 状态发生变化。
    orzorzorzorz
        5
    orzorzorzorz  
       2019-11-05 10:15:35 +08:00
    改了状态还得更新视图,可能这样才能触发。还有就是 checkbox 这类我记得不都是先找到要点击的那个元素,然后 xxx.click() 或者 xxx.trigger() 的么,你这写法我还真没见过。
    piaochen0
        6
    piaochen0  
    OP
       2019-11-05 10:23:19 +08:00
    @yesterdaysun 多谢,这个方案可以。
    knva
        7
    knva  
       2019-11-05 11:07:49 +08:00
    .change()方法
    maplelin
        8
    maplelin  
       2019-11-05 11:33:35 +08:00
    js 修改 checkbox 状态以前的做法都是监听的 click 事件,至于现代 UI 库都是封装过的 change 事件,跟原生的完全不是一回事
    jay0726
        9
    jay0726  
       2019-11-05 12:47:05 +08:00
    $('#cb_test').prop("checked", true).change();
    这个时候就能触发 change 事件了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:53 · PVG 08:53 · LAX 16:53 · JFK 19:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.