【问题标题】:Event handler not triggered on specified event事件处理程序未在指定事件上触发
【发布时间】:2016-07-03 21:31:20
【问题描述】:

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

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

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

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

 $('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) 编辑:解决方法是更改​​包装函数。以前的版本没有调用包装函数。

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

【问题讨论】:

    标签: javascript jquery events jquery-events


    【解决方案1】:

    改变:

         $('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>
    

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多