在以编程方式更改html选择下拉列表后,onchange不会触发

时间:2012-10-18 16:02:29

标签: javascript html dojo

我有一个内部选择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 这样做的信息,也没有任何解释如何绕过它。

有什么想法吗?

3 个答案:

答案 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?上的代码,了解如何以跨浏览器的方式。