2017-01-16 128 views
1

我試圖處理粘貼事件並試圖富文本轉換爲純文本屬性「的getData」,我有一個內容編輯(動態創建)的div容器內ID爲main遺漏的類型錯誤:無法讀取的不確定

$("#main").on("paste","div",function(event){ 
    event.preventDefault(); 
    var clipboarddata = event.clipboardData ||window.clipboardData || event.originalEvent.clipboardData;     
    var onlytext = clipboarddata.getData('text/plain'); 
    document.execCommand("insertHTML", false, onlytext); 
}); 

Uncaught TypeError: Cannot read property 'getData' of undefined

我覺得event.clipboarddata不工作,我的瀏覽器支持剪貼板API。我正在複製文本並將其粘貼到div中。所以剪貼板應該有一定的價值

有人能解釋爲什麼我clipboardData未定義

+0

請注意,在'event.originalEvent.clipboarddata'中,「data」中的「d」應該是「D」。 – Pointy

+0

@pointy是的,我糾正它,但仍然是相同的錯誤 – beginner

+1

好吧,理解安全考慮可能會阻止您的代碼訪問剪貼板數據。你的代碼應該檢查,以確保在假定它可以被使用之前*有*數據。 – Pointy

回答

2

對於最新的瀏覽器Chrome的以下行會工作。

var clipboarddata = window.event.clipboardData.getData('text'); 

$(document).ready(function(){ 
 

 
$("#main").on("paste",function(event){ 
 
     event.preventDefault(); 
 
     var clipboarddata = window.event.clipboardData.getData('text');  
 
     console.log("paste value" + clipboarddata); 
 
     $('#pasteData').text(clipboarddata); 
 
    }); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="main" name="first_name" value="" maxlength="100" /> 
 
<div>paste value : <span id="pasteData"><span></div>

+0

不,它不會。 Firefox沒有'window.event',即使這樣做並不總是如此,event.clipboardData可用。你的代碼基本上就是OP已經有的。 – Pointy

+0

@MGA不工作, – beginner

+0

請問您的瀏覽器版本 – MGA

0

注意:這是爲什麼你所得到的錯誤。修復這個bug是一個不同的問題,需要更多的信息。

你所得到的錯誤的原因是因爲當你使用或變量賦值操作符,它會永遠分配最後一個值,即使它是nullfalse,或undefined

基本上,它是這樣的

if (event.clipboardData != null/false/undefined) { //ignore the incorrectness of the truncation 
    var clipboarddata = event.clipboardData; 
} else if (window.clipboardData != null/false/undefined) { 
    var clipboarddata = window.clipboardData; 
} else { //default to the last option even if it is null/false/undefined 
    var clipboarddata = event.originalEvent.clipboardData; 
} 

因此,由於三者都是undefined,你得到的event.originalEvent.clipboardData這是undefined分配給變量的值。因此下一行的錯誤。

+0

是你是正確的,但爲什麼我得到undefined,我複製文本,所以cliboard應該提供一個有效的值 – beginner

+1

@beginner - 沒有足夠的信息在OP給出答案。 'console.log'你的各種輸出和變量,看看那個找出它破壞的地方。將事件監聽器放在你的所有動作和'console.log'上。備份事件鏈,直到找到錯誤。 – amflare

相關問題