Javascript 我可以更改';在使用Dojo触发onChange之前,是否在输入中输入了?
我们使用Dojo1.9.3,我们有一个定制的小部件,它本质上是一个包装器,可以包含任何其他Dojo小部件以及任何Struts2 JSP组件 目前,这些组件存在一个问题,即在将其发送到服务器时,输入到子组件的两端的尾随空格会被保留。这会导致错误,用户可能认为该值有效,但实际上无效 我们目前使用以下代码来处理onchange事件(为了简洁起见,删除了一些代码) 有没有办法告诉Dojo“在该组件(既可以是Dojo组件,也可以是常规HTML组件)触发此onChange事件之前,对输入执行Javascript 我可以更改';在使用Dojo触发onChange之前,是否在输入中输入了?,javascript,struts2,dojo,Javascript,Struts2,Dojo,我们使用Dojo1.9.3,我们有一个定制的小部件,它本质上是一个包装器,可以包含任何其他Dojo小部件以及任何Struts2 JSP组件 目前,这些组件存在一个问题,即在将其发送到服务器时,输入到子组件的两端的尾随空格会被保留。这会导致错误,用户可能认为该值有效,但实际上无效 我们目前使用以下代码来处理onchange事件(为了简洁起见,删除了一些代码) 有没有办法告诉Dojo“在该组件(既可以是Dojo组件,也可以是常规HTML组件)触发此onChange事件之前,对输入执行trim()”?
trim()
”?注意,它需要处理Dojo输入以外的事情
我已经尝试了aspect.before和aspect.around两种方法,但在使用这两种方法时,我似乎都无法获得输入参数。作为aspect.before不起作用的示例:
this.own(aspect.before(containedWidget, "onChange", function(e){
if(typeof e === "string"){
e = e.trim();
}
return [e];
}));
代码在onChange之前被触发,但我似乎无法获取输入值。我认为您可以使用客户设置器解决此问题 setter(必须定义一个特殊的签名作为dojo需求)可以检测一个值,更改该值(例如应用修剪),并使其在小部件中可用 自定义setter dojo方式示例:
_setFooAttr: function (value) {
value = value.trim(); // do your trim here
this._set('foo', value);
}
您可以使用以下方法恢复修剪后的值:
var value=this.get('foo')代码>
有关自定义getter和setter的有趣文章:
这对我没有帮助,因为设置的不是我创建的自定义小部件的值。自定义小部件有一个containedWidget,它可以不仅仅是一个Dojo输入小部件。它也可以是HTML输入或Struts2输入。正是在这个包含的小部件上,我需要对输入的值进行预处理,我认为我无法更改非Dojo组件的元素上的_setValueAttr。
_setFooAttr: function (value) {
value = value.trim(); // do your trim here
this._set('foo', value);
}