我有一个内部选择HTML
<select id="league" name="league">
我正在听我的javascript中的更改。
var league = dojo.byId("league");
dojo.connect(league, "onchange", function (evt) { //do stuff }
哪个工作正常。 但是我有一个链接,我可以点击它更新选择:
<a href=javascript:void(0) onclick="updateSelection(league);"> League </a>
链接有效,因为它使用以下函数更新选择的选定值。
function updateSelection(NewLeague){
dojo.byId('league').value = NewLeague; // works
dojo.byId('league').onChange; //this isnt working
//dojo.byId('league').onChange(); //this throws: TypeError: dojo.byId("league").onChange is not a function
}
我的问题,正如我通过其他堆栈帖子阅读的那样,以编程方式更新值不会触发onChange,因此我需要在代码中调用onchange(如上所示)。根据内联注释,onChange未被触发或抛出错误。我首先想到它与侦听onChange的dojo.Connect有关,但我没有找到任何说明我 cant 这样做的信息,也没有任何解释如何绕过它。
有什么想法吗?
答案 0 :(得分:10)
选择onchange不会因为编程更改而触发,您需要使用league.onchange();
如@Greg所述,调用应为小写。
此外,我不知道dojo是否有触发方法,但在jQuery中,这将以jQuery('#league').trigger('change')
完成。
根据您的道场版本,您可能还需要查看:http://dojotoolkit.org/reference-guide/1.8/dojo/connect.html
答案 1 :(得分:1)
您是否尝试过使用普通的js调用select by it的id?
document.getElementById('league').onchange.call();
答案 2 :(得分:0)
正如其他人所说,你需要自己触发事件,只是设置值不会那样做。请参阅How to trigger event in JavaScript?上的代码,了解如何以跨浏览器的方式。