事件处理程序未在指定事件上触发

Event handler not triggered on specified event

本文关键字:事件 程序 事件处理      更新时间:2023-09-26

我正在实现一个具有复杂数据字段依赖关系的用户输入表单。例如,收集用户地址的表单:国家、州和街道地址。

当country字段发生变化时,我想触发state字段的清理过程。当州改变时,我要干净的街道地址字段。它们像依赖树结构一样链接在一起。

这是我在JSFiddle中的设置。它包含5个输入框。它们的依赖树是用HTML5数据属性实现的。

我想将函数cleanSubtree绑定到每个输入框的change事件。因此,每当检测到更改时,该函数将清除所有相关字段。如下:

 $('input').on('change',function cleanSubtreeHandlerWrapper(e){
        var inputElem = $(this);
    return function(){
        e.stopPropagation(); 
        cleanSubtree(inputElem);
    };
});

但是,当我更改任何输入框的文本时,有界函数似乎没有执行。但是如果我直接调用它们,函数将正常工作,例如cleanSubtree($('#i3'));

请问cleanSubtree功能不触发的原因是什么?

(PS:我使用jQuery 2.1.4和Chrome 51.0.2704.103 m)EDIT:修复方法是更改包装器功能。以前的版本没有调用包装器函数。

    $('input').on('change',
              function cleanSubtreeHandlerWrapper(e){ //** seems not triggered
                  e.stopPropagation(); 
                  cleanSubtree($(this));
              });

change:

     $('input').on('change',function processNodeHandlerWrapper(e){
        var inputElem = $(this);
    return function(){
        e.stopPropagation(); 
        cleanSubtree(inputElem);
    };
});

:

<script>
    $('input').on('change',function processNodeHandlerWrapper(e){
        var inputElem = $(this);
        e.stopPropagation(); 
        cleanSubtree(inputElem);
      })
</script>