如果在網路上找一個關於如何將一段特定的文字拷貝到剪貼簿的解決方案,最可能的結果就是使用Flash的方案來做這個事,雖然使用Flash可以很好地解決這個問題,但是這不是一個明智的想法,因為這個產品最終會消失或至少是瀏覽器不再提供支援,因此這個解決方案是沒有未來的。雖然可以使用jQuery或純JavaScript,甚至完全自己寫,但是當有人已經創建了一個解決方案,那麼為什麼還要重複發明輪子呢?讓我們一起看看Clipboard.js吧。
Clipboard.js刪除了Flash元件並且優雅地解決了這個問題,需要做的只是引入其腳本,在HTML標籤上賦一個「data-clipboard-target」屬性然後寫一小段JavaScript片段。為了示範假定有一個貨幣轉換應用,在一個文字方塊中輸入數值時同時將兌換結果顯示在另一個文字方塊中,當點擊文字方塊時,會觸發事件將其複製到剪貼簿然後顯示訊息。
下面是我的實作。
假如這是你的文字框。 (我使用MVC框架創建我的應用程式)
<divclass="row"><divclass="col-md-6">From<divclass="input-group"> <divclass="input-group-addon">$</div> @Html.EditorFor(model=>model.AmountFrom,new{htmlAttributes=new{@class="form-controlinput-largest",@step="0.01",@type="number"}}) </div></div><divclass="col-md-6">To<divclass="input-group"><divclass="input-group-addon">$ </div><inputtype="text"id="AmountTo"value="@Model.AmountTo"class="form-controlinput-largest"readonlydata-clipboard-action="copy"data-clipboard-target="#AmountTo"/> </div> </div> </div>
你有沒有註意到我有一個 AmountTo和 一個AmountFrom,AmountTo是輸入AmountFrom 是輸出 ,當我們點擊這個的時候其值就會傳給剪切板。這個神奇的事情發生在屬性「data-clipboard-target」裡面。
我們也加入一個訊息框用來顯示拷貝動作訊息
<divclass="row"> <divclass="col-md-6"><br/> <spanid="messageBox"class="text-success"style="display:block;text-align:center"></span></div></div>
到這裡就是你所關心的HTML部分。現在讓我們去看JavaScript/jQuery 部分
<scriptsrc="~/Scripts/clipboard.min.js"> </script> <script>varclipboard=newClipboard('#AmountTo'); clipboard.on('success',function(e){$("#messageBox").text("AmountSuccessfullyCopied!").show().fadeOut(2000);e.clearSelection();});clipboard.on('error',function(e){$("#messageBox").text("ErrorCopyingAmount").show().fadeOut(2000);});$('#AmountFrom').click(function(){$("#AmountFrom").val("");}); </script>
至此,會發現我們只是引入了clipoard.js,如果實例化Clipboard成功,然後會給事件賦予一些動作,否則它會觸發一個錯誤,是這樣吧?這一切都很好,它能相容於所有最新的瀏覽器,除了IE,它會給出下面這樣的一個訊息。
如果希望看實際的效果,這是一個JSFiddle範例。
接下來就是抓取剪貼簿的資料然後當點擊時自動地貼上到一個文字框,至此,看上去瀏覽器因為一個安全上的風險會阻止它,但是我會嘗試找到甚至做出一個方案,因此大家還得繼續關注。