0

是否可以分配select()给一个replaceWith()

$('#foo').one('click', function() {
 $(this).replaceWith('<textarea id="copy">'+$(this).text()+'</textarea>');
});

$('#copy').click(function() {
 $(this).select();
});

我已经尝试过上面的代码,但它不起作用(我认为这是因为这replaceWith()是一个虚构的元素(如果你明白我的意思的话))。

但是,我通过将其onclick="this.focus();this.select()"放入replaceWith()

$('#foo').one('click', function() {
 $(this).replaceWith('<textarea id="copy" onclick="this.focus();this.select()">'+$(this).text()+'</textarea>');
});

但更喜欢它在replaceWith()代码之外,就像第一个代码试图做的那样。

4

1 回答 1

1

在您的原始代码中,您将单击事件绑定到一个不存在的对象(在绑定时不存在)。

以下在将 textarea 插入 DOM后绑定了 click 事件,并且应该可以工作。

$('#foo').one('click', function() {
  $(this).replaceWith('<textarea id="copy">'+$(this).text()+'</textarea>');

  // at this point, the textarea exists and the binding will work.
  $('#copy').click(function() {
    $(this).select();
  });
});

另一种方法是使用 on() 对文档对象上的任何单击 #copy 进行绑定。

$('#foo').one('click', function() {
  $(this).replaceWith('<textarea id="copy">'+$(this).text()+'</textarea>');
});

// in this case, it will work even if #copy is non-existant at the time of binding
$(document).on('click', '#copy', function() {
  $(this).select();
});
于 2012-11-04T15:33:56.300 回答