【问题标题】:Dynamically added elements - using $(this)动态添加元素 - 使用 $(this)
【发布时间】:2013-04-16 15:51:53
【问题描述】:

当像这样动态地向 dom 添加元素时:

row = """
    <div class="ipad-row">
        <h3>Sample Row</h3>
        <div id="wrapper-placeholder">

            <div class="scrollView" style="">
                <a class="btn btn-primary add-row-item">Add an item</a>
            </div>
        </div>
    </div>
"""


$(".add-row").live "click", ->
    $(".ipad .body").append row
    false

当我尝试从该行元素内的链接中获取它时,怎么会得到窗口:

$(".add-row-item").live "click", =>
    f = $ this
    console.log f // this logs window object, not the link element?
    f.parent().append row_item

如果在加载 dom 时元素确实存在,有人可以解释一下这种行为以及我如何使用 $(this) 吗?

谢谢

【问题讨论】:

  • live() 已弃用,您应该改用on
  • 谢谢,让我这样做

标签: coffeescript jquery


【解决方案1】:

=&gt; 在父上下文中将 this 更改为 this

$(".add-row-item").live "click", =>
    f = $(this)

编译成

var _this = this;
$(".add-row-item").live("click", function() {
    var f = $(_this);

改用-&gt;,它不会修改this

【讨论】:

  • 一个 78.3 k 声望的家伙对 live() 什么都不说是很不寻常的
  • @Ankit "使用$(document).on('click', '.add-row-item', function() { ... }); 而不是.live,因为不推荐使用blabla - 请参阅.on() 的文档"。我回答了这个问题,这是关于 Coffeescript 语法,而不是 jQuery。
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2017-02-09
相关资源
最近更新 更多