Dijit事件在动态窗格中不起作用

时间:2011-09-23 10:54:13

标签: javascript dojo dijit.form

有人可以告诉我为什么following都不起作用吗?

修改 (只是因为链接断开这个问题是关于你怎么似乎不能在加载到dijit窗格的页面中触发事件。这适用于Firefox 6.0.2,Crome 12.0.742.100和Opera 11.00 .1156)

<!-- index.html -->


<script>
    dojo.addOnLoad(function() {
        dijit.byId("mainSettings").set("href","index2.html");
    });
</script>

<body class="claro">
    <div id="main" dojoType="dijit.layout.BorderContainer">
        <div dojoType="dojox.layout.ContentPane" splitter="false" id="mainSettings" region="center"></div>
    </div>
</body>


<!-- index2.html -->


<!-- THIS WORKS!!! -->

<select dojoType="dijit.form.Select">
    <option value="bool">On/Off</option>
    <option value="date">Date</option>
    <option value="float">Number</option>
    <option value="text">Text</option>
    <script type="dojo/method" event="onChange">
        alert("change");
    </script>
</select>

<!-- NONE OF THIS WORKS!!! -->

<select dojoType="dijit.form.Select" onChange="change1">
    <option value="bool">On/Off</option>
    <option value="date">Date</option>
    <option value="float">Number</option>
    <option value="text">Text</option>
</select>
<script type="dojo/method" event="change1">
    alert("change1");
</script>



<button dojoType="dijit.form.Button" onClick="change2">
    change2
</button>
<script type="dojo/method" event="change2">
    alert("change2");
</script>


<script>
    dojo.addOnLoad(function() {
        dojo.connect(dijit.byId('button2'), 'onClick', function(){
            alert("change3");
        });
    });
</script>
<button dojoType="dijit.form.Button" id="button2">
    button2
</button>

修改 Dojango代码:

#forms.py

type = CharField(widget=Select(choices=VARIABLE_CHOICES,attrs={'onChange':'letterVariableTypeSelectChange'}))

#template

{{ form.type }}
<script>
    function letterVariableTypeSelectChange(){
        alert("dave");
    }
</script>

1 个答案:

答案 0 :(得分:1)

尝试在dojox.layout.ContentPane上将executeScriptsparseOnLoad属性设置为true

<div id="main" dojoType="dijit.layout.BorderContainer">
        <div dojoType="dojox.layout.ContentPane" executeScripts="true" parseOnLoad="true" splitter="false" id="mainSettings" region="center"></div>
</div>

您使用dojo / method的方式似乎也存在根本差异。

<script type="dojo/method">标记应该包含在它们覆盖的元素中

请注意您的代码段是如何定义的:

<select dojoType="dijit.form.Select">
    <option value="bool">On/Off</option>
    <option value="date">Date</option>
    <option value="float">Number</option>
    <option value="text">Text</option>
    <!--Script tag inside widget node, event is the name of the event to override -->
    <script type="dojo/method" event="onChange">
        alert("change");
    </script>
</select>

与不起作用的那些:

<!--onChange here is specified directly on the widget (which is incorrect), should be in the 
    <script type="dojo/method" event="OnChange"> 
-->
<select dojoType="dijit.form.Select" onChange="change1">
    <option value="bool">On/Off</option>
    <option value="date">Date</option>
    <option value="float">Number</option>
    <option value="text">Text</option>
</select>
<!--script tag outside the select.  event refers to a nonexistent event for the widget.-->
<script type="dojo/method" event="change1">
    alert("change1");
</script>

您可以获取可以使用dojo / method覆盖给定小部件的参考文档的可用事件列表。

http://dojotoolkit.org/api/dijit/form/FilteringSelect