無(wú)需 Flash 使用 jQuery 復(fù)制文字到剪貼板
如果在網(wǎng)上找一個(gè)關(guān)于如何將一段特定的文本拷貝到剪貼板的解決方案,最可能的結(jié)果就是使用Flash的方案來(lái)做這個(gè)事,雖然使用Flash可以很好地解決這個(gè)問(wèn)題,但是這不是一個(gè)明智的想法,因?yàn)檫@個(gè)產(chǎn)品最終會(huì)消失或者至少是瀏覽器不再提供支持,因此這個(gè)解決方案是沒(méi)有未來(lái)的。雖然可以使用jQuery或者純JavaScript,甚至完全自己寫(xiě),但是當(dāng)有人已經(jīng)創(chuàng)建了一個(gè)解決方案,那么為什么還要重復(fù)發(fā)明輪子呢?讓我們一起看看Clipboard.js吧。
Clipboard.js刪除了Flash組件并且優(yōu)雅地解決了這個(gè)問(wèn)題,需要做的只是引入其腳本,在HTML標(biāo)簽上賦一個(gè)“data-clipboard-target”屬性然后寫(xiě)一小段JavaScript片段。為了演示假定有一個(gè)貨幣轉(zhuǎn)換應(yīng)用,在一個(gè)文本框中輸入數(shù)值時(shí)同時(shí)將兌換結(jié)果顯示在另一個(gè)文本框中,當(dāng)點(diǎn)擊文本框時(shí),會(huì)觸發(fā)事件將其復(fù)制到剪貼板然后顯示一條消息。
下面是我的實(shí)現(xiàn)。
假如這是你的文本框。(我使用MVC框架創(chuàng)建我的應(yīng)用程序)
<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>
你有沒(méi)有注意到我有一個(gè) AmountTo和 一個(gè)AmountFrom,AmountTo是輸入AmountFrom 是輸出 ,當(dāng)我們點(diǎn)擊這個(gè)的時(shí)候其值就會(huì)傳給剪切板。這個(gè)神奇的事情發(fā)生在屬性“data-clipboard-target”里面。
我們也添加一個(gè)消息框用來(lái)顯示拷貝動(dòng)作消息
<divclass="row"> <divclass="col-md-6"><br/> <spanid="messageBox"class="text-success"style="display:block;text-align:center"></span></div></div>
到這里就是你所關(guān)心的HTML部分。現(xiàn)在讓我們?nèi)タ碕avaScript/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>
至此,會(huì)發(fā)現(xiàn)我們只是引入了clipoard.js,如果實(shí)例化Clipboard成功,然后會(huì)給事件賦予一些動(dòng)作,否則它會(huì)觸發(fā)一個(gè)錯(cuò)誤,是這樣吧?這一切都很好,它能兼容所有最新的瀏覽器,除了IE,它會(huì)給出下面這樣的一個(gè)消息。
如果希望看一下實(shí)際的效果,這是一個(gè)JSFiddle示例。
接下來(lái)就是抓取剪貼板的數(shù)據(jù)然后當(dāng)點(diǎn)擊時(shí)自動(dòng)地粘貼到一個(gè)文本框,至此,看上去瀏覽器因?yàn)橐粋€(gè)安全上的風(fēng)險(xiǎn)會(huì)阻止它,但是我會(huì)嘗試找到甚至做出一個(gè)方案,因此大家還得繼續(xù)關(guān)注。
相關(guān)文章
jquery之超簡(jiǎn)單的div顯示和隱藏特效demo(分享)
本篇文章是對(duì)jquery中的div顯示和隱藏特效demo進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07jQuery對(duì)象和DOM對(duì)象之間相互轉(zhuǎn)換的方法介紹
這篇文章主要介紹了jQuery對(duì)象和DOM對(duì)象之間相互轉(zhuǎn)換的方法介紹,本文講解了jQuery對(duì)象轉(zhuǎn)成DOM對(duì)象、DOM對(duì)象轉(zhuǎn)換成jQuery對(duì)象 方法,需要的朋友可以參考下2015-02-02快速解決jquery之get緩存問(wèn)題的最簡(jiǎn)單方法介紹
要解決該問(wèn)題有很多辦法,最直接的是把$.get()方法換成$.ajax(),然后配置cache:false即可。我不喜歡$.ajax()繁瑣的配置方式,可采取以下最簡(jiǎn)單方式實(shí)現(xiàn)2013-12-12jQuery zTree 異步加載添加子節(jié)點(diǎn)重復(fù)問(wèn)題
zTree 是一個(gè)依靠 jQuery 實(shí)現(xiàn)的多功能 “樹(shù)插件”。下面通過(guò)本文給大家分享jQuery zTree 異步加載添加子節(jié)點(diǎn)重復(fù)問(wèn)題,需要的朋友參考下吧2017-11-11jquery兩種導(dǎo)入方式之本地導(dǎo)入和線上導(dǎo)入
這篇文章主要給大家介紹了關(guān)于jquery兩種導(dǎo)入方式之本地導(dǎo)入和線上導(dǎo)入的相關(guān)資料,jQuery是一款JavaScript庫(kù),封裝了JavaScript相關(guān)方法調(diào)用,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11ASP.NET jQuery 實(shí)例18 通過(guò)使用jQuery validation插件校驗(yàn)DropDownList
這節(jié)我們還可以通過(guò)直接設(shè)置DropDownList屬性來(lái)設(shè)置jQuery validation插件的校驗(yàn)規(guī)則和提示信息2012-02-02javascript向后臺(tái)傳送相同屬性的參數(shù)即數(shù)組參數(shù)
在傳送參數(shù)時(shí),經(jīng)常會(huì)碰到向后臺(tái)傳送一些相同屬性的參數(shù),最好的選擇是采用數(shù)組的方式,下面有個(gè)不錯(cuò)的示例,大家可以參考下2014-02-02