将dojo Autocompleter连接到javascript函数

时间:2011-12-26 07:15:31

标签: javascript autocomplete event-handling dojo

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

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

其次我找到了这个文档(http://dojotoolkit.org/reference-guide/quickstart/events.html#connecting-to-a-dom-event),它应该解决我的问题。但不知怎的,我仍然无法连接到javascript函数。

以下是我试图测试它的示例页面。

JSP:

<s:form id="form">
    <sd:autocompleter id="try" list="sampleList"/>
</s:form>

JS文件:

dojo.connect(dojo.byId("try"),"onchange", tryAlert);

function tryAlert(){
    alert('successful');
}

我不知道我在文档中解释错误。

请告知。

谢谢!

2 个答案:

答案 0 :(得分:2)

这是我最终做的事情。对于那些仍处于类似情况的人来说,这将有所帮助。

在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>

在js文件中执行以下操作:

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" - 效果。

如果您仍然遇到麻烦,请寻求帮助:)。

答案 1 :(得分:0)

好吧我猜“autocompleter”的struts组件是dojo的dijit.form.FilteringSelect。 您可以在http://dojotoolkit.org/api找到其文档。在那里,打开树并按照路径dijit / form / FilteringSelect,然后部署“事件摘要”标题。

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

此外,可以通过dijit.byId(“yourId”)找到dojo小部件 - 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>

或...如果您更喜欢javascript方式:

dojo.ready(function(){
    dijit.byId("try").onChange = function(newValue) {
        alert("Changed to new value", newValue);
    }
}