Javascript 我可以更改';在使用Dojo触发onChange之前,是否在输入中输入了?

Javascript 我可以更改';在使用Dojo触发onChange之前,是否在输入中输入了?,javascript,struts2,dojo,Javascript,Struts2,Dojo,我们使用Dojo1.9.3,我们有一个定制的小部件,它本质上是一个包装器,可以包含任何其他Dojo小部件以及任何Struts2 JSP组件 目前,这些组件存在一个问题,即在将其发送到服务器时,输入到子组件的两端的尾随空格会被保留。这会导致错误,用户可能认为该值有效,但实际上无效 我们目前使用以下代码来处理onchange事件(为了简洁起见,删除了一些代码) 有没有办法告诉Dojo“在该组件(既可以是Dojo组件,也可以是常规HTML组件)触发此onChange事件之前,对输入执行trim()”?

我们使用Dojo1.9.3,我们有一个定制的小部件,它本质上是一个包装器,可以包含任何其他Dojo小部件以及任何Struts2 JSP组件

目前,这些组件存在一个问题,即在将其发送到服务器时,输入到子组件的两端的尾随空格会被保留。这会导致错误,用户可能认为该值有效,但实际上无效

我们目前使用以下代码来处理onchange事件(为了简洁起见,删除了一些代码)

有没有办法告诉Dojo“在该组件(既可以是Dojo组件,也可以是常规HTML组件)触发此onChange事件之前,对输入执行
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);
 }