-2

有人能告诉我为什么以下方法都不起作用吗?

编辑 (以防链接失效,这个问题是关于如何在加载到 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>
4

1 回答 1

1

尝试在 dojox.layout.ContentPane 上将executeScriptsand属性设置为 trueparseOnLoad

<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

于 2011-09-23T12:24:51.293 回答