阅读:3618回复:3
请教GM脚本问题:新创建的select,onchange事件不能调用本地函数
我正在学习写GM脚本,为Travian游戏编一个自动任务脚本。在设计输入界面时遇到这样的问题:
//创建对话框: var taskaddform = document.createElement("form"); taskaddform.id = "taskForm"; taskaddform.innerHTML +="任务种类 : " + addTaskKind + "<br /><br />"; taskaddform.innerHTML +="建筑物: " +addidselectforms+"<br /><br />"//!!!问题就出在这里!!! var oSubmitBtn = document.createElement("input"); oSubmitBtn.name = "submitBtn"; oSubmitBtn.id = "submitBtn"; oSubmitBtn.value = "OK"; oSubmitBtn.type = "button"; taskaddform.appendChild(oSubmitBtn); var oWrapper = document.createElement("div"); oWrapper.id = "taskForm_wrapper"; oWrapper.appendChild(taskaddform); document.body.appendChild(oWrapper); //作为innerHTML字符串: addidselectforms= '<select id="buildaid" name="buildaid" onchange="getMaxlevel()">'+ '<option value="5">'+allbuildwithid[5]+'</option>'+ '<option value="6">'+allbuildwithid[6]+'</option>'+ '<option value="7">'+allbuildwithid[7]+'</option>'+ '<option value="8">'+allbuildwithid[8]+'</option>'+ '<option value="9">'+allbuildwithid[9]+'</option>'+ '</select>' //onchange调用的函数: function getMaxlevel(){ GM_log("come into function") } //这个不是原函数,但已经不重要,因为错误控制台报错说这个函数undefined. 另外,我还尝试了下面的方法,但都不管用: 1、以新建select元素的方式,然后用setAttribute()添加onchange属性 2、用addEventListener监听change事件,尝试调用函数 3、用function(){ } 包含函数名。(此方法对indow.setInterval()有效,不用这种方式,同样会报错函数undefined.) 请各位大大帮忙看下,到底应该怎么处理才对。 |
|
1楼#
发布于:2009-06-21 22:31
1、删掉 onchange="getMaxlevel()"
2、在 document.body.appendChild(oWrapper); 下一行添加这句 document.getElementById('buildaid').addEventListener('change', getMaxlevel, false); |
|
2楼#
发布于:2009-06-21 22:31
|
|
3楼#
发布于:2009-06-21 22:31
你看看错误控制台里有什么关于此脚本的报错没有?
二楼那个方法肯定是可以的 或者你可以把整个脚本打包发上来看看 |
|