Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将dojo自动完成程序连接到javascript函数_Javascript_Autocomplete_Event Handling_Dojo - Fatal编程技术网

将dojo自动完成程序连接到javascript函数

将dojo自动完成程序连接到javascript函数,javascript,autocomplete,event-handling,dojo,Javascript,Autocomplete,Event Handling,Dojo,当Dojo自动完成器中的选定值发生更改时,我尝试调用java脚本函数,但我无法这样做 首先,因为标准的onchange属性在这里不起作用,因为这不是标准的HTML组件 其次,我找到了这个文档(),它应该可以解决我的问题。但不知何故,我仍然无法连接到javascript函数 这是一个示例页面,我正试图通过它来测试这一点 JSP: <s:form id="form"> <sd:autocompleter id="try" list="sampleList"/> <

当Dojo自动完成器中的选定值发生更改时,我尝试调用java脚本函数,但我无法这样做

首先,因为标准的
onchange
属性在这里不起作用,因为这不是标准的HTML组件

其次,我找到了这个文档(),它应该可以解决我的问题。但不知何故,我仍然无法连接到javascript函数

这是一个示例页面,我正试图通过它来测试这一点

JSP:

<s:form id="form">
    <sd:autocompleter id="try" list="sampleList"/>
</s:form>
我不知道我从文档中错误地解释了什么

请告知


谢谢

好吧,我想“自动完成器”的struts组件是dojo的dijit.form.FilteringSelect。 您可以在中找到其文档。到达后,打开树并遵循路径dijit/form/FilteringSelect,然后部署“Event summary”头

您将找到小部件接受的扩展点列表(比如事件…)。对你来说,正确的方法叫做“onChange”(注意大写字母C)

此外,dojo小部件可以通过dijit.byId(“yourId”)通过id找到-dojo.byId用于常规dom节点

因此,要使用onChange扩展点,您应该执行以下操作:

<s:form id="form">
    <sd:autocompleter id="try" list="sampleList">
        <script type="dojo/method" event="onChange" args="newValue">
            alert('successful');
        </script>
</s:form>

这就是我最后要做的。对于那些仍然处于类似情况的人来说,这将是有帮助的

在jsp文件中,执行以下操作:

<s:form id="form">
    <s:hidden id="chngd"/>
    <sd:autocompleter id="try" list="sampleList" valueNotifyTopics="topic"/>
    ///////////
    //Here you can put more autocompleters if you need them , Like I needed them
    ///////////
</s:form>
dojo.event.topic.subscribe("topic", function(){
    dojo.byId('chngd').value='try';// I have set the value of the hidden field to desired value here....
    //whatever more you want to do....
});

//////////
//Here there would be a subscription (similar to above) for each autocompleter you have put in your jsp.
//////////
因此,这里将发生的是,每当一个自动完成器被更改时,它都会通知或发布一个主题供听众收听。现在java脚本中的
subscribe
函数将侦听其各自的“主题”,当主题发布时,
subscribe
将在其中执行javascript函数

这样,无论何时更改自动完成程序,都会调用相应的javascript函数,因此我们有一种--
onchange=“javascript function”
--效果


如果你仍然面临困难,请寻求帮助:)。

这很有帮助。但是,如果我有5个自动补全器,我想将一个隐藏字段的值设置为一个特定的值,每个自动补全器的值都会不同,那么这将如何工作呢?我想出了另一个办法。我把它贴在回信里。如果你觉得可以改进,请发表评论。那么,你的意思是。。。任何时候当你的自动补码器发生变化时,都会有一个隐藏的输入被设置为某个值?很抱歉回复太晚。是的,这正是我想要的。因为我想与action类交流更改了哪个autocompleter。
<s:form id="form">
    <s:hidden id="chngd"/>
    <sd:autocompleter id="try" list="sampleList" valueNotifyTopics="topic"/>
    ///////////
    //Here you can put more autocompleters if you need them , Like I needed them
    ///////////
</s:form>
dojo.event.topic.subscribe("topic", function(){
    dojo.byId('chngd').value='try';// I have set the value of the hidden field to desired value here....
    //whatever more you want to do....
});

//////////
//Here there would be a subscription (similar to above) for each autocompleter you have put in your jsp.
//////////