congxz6688
火狐狸
火狐狸
  • UID14676
  • 注册日期2006-09-23
  • 最后登录2017-03-06
  • 发帖数108
  • 经验12枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
阅读:3371回复:3

请教GM脚本问题:新创建的select,onchange事件不能调用本地函数

楼主#
更多 发布于:2009-06-21 22:31
我正在学习写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.)


请各位大大帮忙看下,到底应该怎么处理才对。
zb0502
小狐狸
小狐狸
  • UID24228
  • 注册日期2008-05-20
  • 最后登录2014-11-11
  • 发帖数86
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
1楼#
发布于:2009-06-21 22:31
1、删掉 onchange="getMaxlevel()"

2、在 document.body.appendChild(oWrapper);  下一行添加这句
document.getElementById('buildaid').addEventListener('change', getMaxlevel, false);
congxz6688
火狐狸
火狐狸
  • UID14676
  • 注册日期2006-09-23
  • 最后登录2017-03-06
  • 发帖数108
  • 经验12枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
2楼#
发布于:2009-06-21 22:31
zb0502:1、删掉 onchange="getMaxlevel()"

2、在 document.body.appendChild(oWrapper);  下一行添加这句
document.getElementById('buildaid').addEventListener('change', getMaxlevel, false);
回到原帖


谢谢回复。
但还是不能解决。我的目的,是想要上方的select选定内容后,调用函数重组下方的select。
在网上查了下,好象是GM运行空间的问题。无论如何,还是谢谢了。
zb0502
小狐狸
小狐狸
  • UID24228
  • 注册日期2008-05-20
  • 最后登录2014-11-11
  • 发帖数86
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
3楼#
发布于:2009-06-21 22:31
你看看错误控制台里有什么关于此脚本的报错没有?

二楼那个方法肯定是可以的

或者你可以把整个脚本打包发上来看看
游客

返回顶部