如何使自定义对象支持jQuery change()等

时间:2016-09-05 11:27:36

标签: jquery

我想创建一种新类型的复合HTML输入。粗略喜欢这个

function create_node ()
{
    let node = document.createElement ('span');
    let a    = document.createElement ('input');
    let b    = document.createElement ('input');

    node.appendChild (a);
    node.appendChild (b);

    node.value = '';

    $(a) .change (function () { /* update node.value */ });
    $(b) .change (function () { /* update node.value */ });

    return node;
}

我希望能够像这样编写jQuery代码:

let foo = create_node ();

$(foo).change (function () { /* use foo.value */ });

我需要在create_thing中做些什么才能使$(foo).change(...)正常工作,因为每次{{1}时都会调用其回调(使用正确的this上下文) }或a已更改?

1 个答案:

答案 0 :(得分:0)

事实证明,因为input节点已经有change个事件,所以默认情况下该事件会通过父节点冒泡,所以你不必做任何事情。

如果内部节点尚未发生change事件,您可以执行以下操作

$(internal_node) .click (function () {
    // ...
    $(parent_node) .change ();
});

你可以抑制像这样的默认更改事件

$(internal_node) .click (function (e) {
    e .preventDefault ();
    e .stopPropagation ();
});