javascript 内部函数不能再内部创建的html元素的click事件中引用到?

方方圆圆 发布于 2012/07/10 10:37
阅读 814
收藏 0

我在函数test中中动态创建一个div,div里包含一个span元素,同时给span添加click事件,事件下引用的函数定义在test中,这样是不合理的么?期待解释!!

function test()

{

var showResultDiv = document.createElement('div');

showResultDiv.innerHTML = "<span onclick = 'clickevent()'>test</span>"

 

function clickevent()

{

alert("yes");

}

}

加载中
0
cuxan-zh
cuxan-zh

clickevent()得放在test()外部

比如:

function test(){

    var showResultDiv = document.createElement('div');

    showResultDiv.innerHTML = "<span onclick = 'clickevent()'>test</span>"

}

function clickevent(){

    alert("yes");

}

就可以正常调用了

0
韩启朋
韩启朋
showResultDiv.innerHTML = "<span onclick = 'clickevent()'>test</span>"
这里调用的函数 clickevent 是全局作用域下面的
方方圆圆
方方圆圆
按照调试结果来看应该是全局作用下的,大家有什么办法把test中的局部变量传到clickevent中么,test中的局部变量不是简单类型的变量
0
cuxan-zh
cuxan-zh

想把test中的局部变量传到clickevent里,有一个很土的办法,可以把值附给一个全局变量。

比如:

var m;

function test(){

    var showResultDiv = document.createElement('div');

    showResultDiv.innerHTML = "<span onclick = 'clickevent(m)'>test</span>"

    m = {a : 1};

}

function clickevent(obj){

    alert(obj.a);

}

 

如果可以用jquery很还是容易实现的。

等高手解答有没有更好的方法。

方方圆圆
方方圆圆
全局变量定义太多不太好
0
啊的方法
啊的方法

var test = function()

{

var showResultDiv = document.createElement('div');

showResultDiv.innerHTML = "<span onclick = 'test.clickevent()'>test</span>"

 

function clickevent()

{

alert("yes");

}

 return {

  clickevent: clickevent

 }

}()

0
了逸
了逸

function test() {
  var msg = 'message content';
  function click_event(evt) {
     alert(msg);
  }
  var div = document.createElement('div');
  var span = document.createElement('span');
  span.onclick = click_event;
  div.appendChild(span);
  
  // to do 
  // return div or document.body.appendChild(div);
}

方方圆圆
方方圆圆
http://abaper.blogbus.com/logs/8278500.html 我是看了这篇文章说用innerHTML的效率最快,所以没用createElement去做
0
方方圆圆
方方圆圆

引用来自“啊的方法”的答案

var test = function()

{

var showResultDiv = document.createElement('div');

showResultDiv.innerHTML = "<span onclick = 'test.clickevent()'>test</span>"

 

function clickevent()

{

alert("yes");

}

 return {

  clickevent: clickevent

 }

}()

这是用了闭包?差不多是我想要的效果了,学习ing,谢谢!
返回顶部
顶部