【问题标题】:jquery appended html is not detecting javascript?jquery附加的html没有检测到javascript?
【发布时间】:2011-04-23 13:02:57
【问题描述】:

对不起,如果我的问题没有意义,但这是我可以提出的最佳方式,我有这个 jquery 脚本,当用户单击登录链接时,它会附加 html 表单来执行此操作,它工作正常,但附加(login-form) 使用 jquery 登录网站,但它似乎检测不到 javascript,

反对当我把登录表单而不附加,只是在页面上,它工作正常,它检测到javascript,但在附加时没有。

希望你能明白我刚才所说的谢谢:))

代码有点长,但出于说明目的,我将其缩短了。

http://jsfiddle.net/YHCwM/1/

【问题讨论】:

  • 已经提供了答案,值得注意的是 JS Fiddle 并没有真正实现 Ajax(或者 似乎 没有),所以我没有看到任何元素首先动态添加到您的页面。你有一个可以演示你的问题的测试站点吗?还是我错过了什么?

标签: jquery html ajax append


【解决方案1】:

这是因为当脚本第一次运行时,jQuery 通常会将事件绑定到 DOM 中已经存在的元素。稍后添加的元素需要以不同方式绑定,通常使用.live()

代替:

$('#elementAddedLater').click(function(){/*....*/});

尝试:

$('#elementAddedLater').live('click',function(){/*....*/});

上面的链接函数名称给出了可以通过 .live() 绑定的其他事件的运行过程

正如@Pointy 所指出的那样,.delegate() 也值得一看,它似乎提供与.live() 大致相同的功能,但更简洁明了。

【讨论】:

  • 另外值得一看的是.delegate()函数,它在某些方面优于.live();它当然更灵活。
【解决方案2】:

发生这种情况的原因是您的事件顺序:

  1. DocumentLoad 触发
  2. submit() 处理程序附加到尚不存在的元素 - 因此不添加任何处理程序
  3. 用户单击按钮将元素添加到页面

您可以通过使用 live events 或更改顺序来解决此问题。 (submit 事件的实时连线是 jQuery 1.4.1 IIRC 的新功能。

$('#regForm2').live('submit', function(e){});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多