我正在实现一个具有复杂数据字段依赖关系的用户输入表单。例如,收集用户地址的表单:国家/地区,州和街道地址。
当国家/地区字段更改时,我想触发状态字段的清理过程。当状态改变时,我想要干净的街道地址字段。它们被链接为依赖树结构。
以下是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) 编辑:修复方法是更改包装器功能。之前的版本没有调用包装函数。
$('input').on('change',
function cleanSubtreeHandlerWrapper(e){ //** seems not triggered
e.stopPropagation();
cleanSubtree($(this));
});
答案 0 :(得分:2)
改变:
$('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>