2012-02-08 28 views
0

我有一个很大的源文件,所以不在这里分享它,但是我遇到的问题是,我无法用下面的代码添加单击事件:on事件可能会失败的情况?

$(document).on('click','#test' + testId , function(e){ 
      console.log('I was clicked'); 
     }); 

如果我使用此代码在单独的文件,它的工作原理,但我的实际来源,我无法调度事件:(可能是什么原因呢?

+3

原因可能是你希望用'#test'+ testId'识别的元素实际上不存在。但是,你的猜测答案的能力应该比我的好,因为你有能够看到Javascript和HTML的所有相关部分的优势。 – 2012-02-08 14:58:47

+0

我把事件附加到文档中,而不是元素,所以在事件发送时元素不需要存在 – wasimbhalli 2012-02-08 15:16:46

+1

我的观点是,元素可能从不存在,并且元素的id可能不存在,重新点击与使用变量'testId'的选择器中指定的id不同。 – 2012-02-08 15:37:27

回答

0

我写的代码中的setTimeout方法和解决的问题。我并没有期待这一点,因为我将这个事件附加到了身体上而不是元素上。在将事件附加到身体时,该元素并不存在,因此事件未被分派。

0

您的文档必须加载或元素'#test' + testId必须存在至少。

<body onload="init()"> 

而这里你的javascript f结:

function init() 
{ 
    $(document).on('click','#test' + testId , function(e){ 
     console.log('I was clicked'); 
    }); 
} 
+1

他将事件附加到'document',而不是'#test'+ testId'。这不是它 – gdoron 2012-02-08 15:09:56

+0

天啊。不要这样做。 HTML属性中的Javascript是可怕的! – 2012-02-08 18:11:05

0

可能是什么原因?

  1. #test + testId元素不存在。
  2. 其他事件处理程序停止传播与e.stopPropagation()return false;
+0

我没有e.preventPropagation();或者在我的代码中返回false。这些语句是否存在于jquery事件中?就像我还有其他同样的事情('点击'事件,可能会阻止传播? – wasimbhalli 2012-02-08 15:12:15

+0

@wasimbhalli。只有当它返回false。尝试使用'#test'+ testId'确保该元素真的存在。 – gdoron 2012-02-08 15:13:48

+0

是的,我创建了这个元素,并且我测试了它,并且它存在。顺便说一下,不是'on'方法是否替换为live?那么它应该也可以在元素稍后添加到DOM时起作用 – wasimbhalli 2012-02-08 15:15:28

相关问题