2013-08-06 11 views
6

Chcę umożliwić użytkownikom kopiowanie dużej liczby adresów e-mail do schowka. Ta odpowiedź wydawała się najbardziej niezawodny sposób, aby to zrobić:Tekst przekazany do window.prompt zostaje zastąpiony przez "..."

How do I copy to the clipboard in JavaScript?

Jednak podczas badania stwierdziliśmy, że window.prompt()zawsze zastępuje część jednej z e-maili z ....

Oto dane testowe:

[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]t.com; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected]; [email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected];[email protected];[email protected];[email protected]; 
[email protected];[email protected]; 

Oto przykładowy kod z następującymi danymi testu:

window.prompt ("To copy emails to clipboard, press: Ctrl+C, then Enter", 
    "[email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected]; [email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];[email protected];[email protected];[email protected]; 
    [email protected];[email protected];"); 

JSFiddle: http://jsfiddle.net/MkYDz/

Kliknij na link powyżej, skopiuj i wklej tekst do edytora tekstu, a zobaczysz, że jeden z e-maili (około połowy) staje się:

[email protected] 

Dlaczego tak się dzieje?

+0

Z której przeglądarki korzystasz? Pracuje dla mnie. – Bergi

+0

Mogę repro this za pomocą Chrome. – j08691

+0

Działa dla mnie w Chrome 28, OSX 10.7. Ale jeśli nie działa w niektórych przeglądarkach, będziesz musiał użyć własnego modalu domowego i textarea. – bfavaretto

Odpowiedz

8

Limit znaków dla wiersza wydaje się być powodem jak MVP powiedział. Jest to znacznie lepsze obejście tego problemu. Użyj numeru textarea z tekstem wiadomości e-mail jako jego treści i użyj funkcji select, aby zaznaczyć cały tekst w obszarze tekstowym, podobnie jak w przypadku monitu.

Przykład:

$('#container').append('To copy emails to clipboard, press: Ctrl+C, then Enter <br /> 
<textarea id="emailsToCopy">'+emailsToCopy+'</textarea>'); 
$('#emailsToCopy').select().focus(); 

Zakładając, należy użyć jQuery. Jeśli nie, możesz użyć funkcji select w elemencie textarea DOM.

var emailsTxtArea = document.getElementById(emailsToCopy); 
emailsTxtArea.select(); 
emailsTxtArea.focus(); 
7

Funkcja window.prompt() jest ograniczona do 2000 znaków w Chromium. Jeśli ciąg wejściowy przekroczy ten limit (twój przykład ma 2059 znaków), ciąg wejściowy jest wycinany w środku zaznaczonym kropkami. Nazywa się to ellipsis.

Oto demonstracja użyciem dokładnie 2000 znaków (Wymieniłem trzy ostatnie znaki z XXX): http://jsfiddle.net/MkYDz/2/

;[email protected]"); 
2

Gdybym miał więcej punktów reputacji by wypowiedzieć się na temat odpowiedzi Jitesh za ...

Jeśli nie używasz jQuery, nie można tego zrobić:

emailsTxtArea.select().focus(); 

Zamiast tego musisz to zrobić:

emailsTxtArea.select(); 
emailsTxtArea.focus(); 

W zwykłym javascript, metoda select nie zwraca obiektu.

Powiązane problemy