2012-11-04 1 views
0

Можно ли присвоить select()replaceWith()?replaceWith and textarea select

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

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

Я пробовал приведенный выше код, но dosen't работы (я предполагаю, что это потому, что 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() кода, как первый код пытается сделать.

ответ

1

В исходном коде вы привязываете событие click к несуществующему объекту (несуществующему во время привязки).

Следующее связывает событие click после, вставляя текстовое поле в DOM и должно работать.

$('#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(); 
}); 
+0

Я понял, что объект был несуществующим, как это то, что я имел в виду «вымышленный элемент» просто не знал правильный жаргон, так просто перемещая выберите код в #foo клик должен работать, ТНХ :) –