情况:
我在jsp上有两个dojo自动完成器。当它们的值发生变化时,它们都会触发相同的动作。现在我希望在动作文件中我应该知道哪个自动填充器已被更改。
我做了什么:
通常,在这种情况下,我会调用javascript来更改隐藏字段的值,然后访问操作文件中该隐藏字段的值以了解哪些已更改。但是我使用“onChange”属性调用javascript(不幸的是)该属性不适用于“autocompleter”。我不得不使用“valueNotifyTopics”来调用动作。
以下是代码:
<s:url id="scriptURL" action="viewContactInfo" />
<sd:div href="%{scriptURL}" listenTopics="viewContactInfo" formId="contactInfo" showLoadingText="false" preload="false">
<s:form id="contactInfo">
<sd:autocompleter autoComplete="false" name="customer" list="customerList" valueNotifyTopics="viewContactInfo"/>
<sd:autocompleter autoComplete="false" name="contact" list="contactList" valueNotifyTopics="viewContactInfo"/>
<s:hidden id="chngd" value="initial"/>
</s:form>
</sd:div>
我希望使用这样的东西:
onchange="dojo.byId('chngd').value='some value'; dojo.event.topic.publish('viewContactInfo');"
而不是
valueNotifyTopics="viewContactInfo"
请告知某些方法来解决我提到的情况。
谢谢!
如果我错过了任何必要的信息,请发表评论。
答案 0 :(得分:1)
看起来您缺少#chngd的名称属性(仅提交具有名称属性的字段)
答案 1 :(得分:0)
我曾经想过这一段时间,但我现在正在发布这个答案,对于仍然遇到麻烦的人:
在jsp中执行此操作:
<sd:autocompleter autoComplete="false" name="customer" list="customerList" valueNotifyTopics="topic"/>
然后在javascript中执行此操作:
dojo.event.topic.subscribe("topic", function(){
dojo.byId('chngd').value='some value';
dojo.event.topic.publish('getLists');
});
这样,当dojo自动填充器的值更改时,您可以在调用操作之前设置隐藏字段的值。就此而言,你可以做更多的事情,因为这就像你正在做的那样 - &gt; onclick="topic()"
。
希望这会有所帮助!!