2015-09-27 81 views
4

我試過了(jsfiddle),但它不起作用。使用jQuery粘貼後刪除空格

如何看到警報爲空。這就像.val()函數在字符串被複制之前啓動。

$(document).on('paste', '#pasteIt', function(){ 
    alert($("#pasteIt").val()); 
    var withoutSpaces = $("#pasteIt").val(); 
    withoutSpaces = withoutSpaces.replace(/\s+/g, ''); 
    $("#pasteIt").text(withoutSpaces); 
}); 

爲什麼?

回答

6

獲取剪貼板數據

$(document).on('paste', '#pasteIt', function(e) { 
 
    e.preventDefault(); 
 
    // prevent copying action 
 
    alert(e.originalEvent.clipboardData.getData('Text')); 
 
    var withoutSpaces = e.originalEvent.clipboardData.getData('Text'); 
 
    withoutSpaces = withoutSpaces.replace(/\s+/g, ''); 
 
    $(this).val(withoutSpaces); 
 
    // you need to use val() not text() 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="text" id="pasteIt" placeholder="Paste something here">

編號:https://forum.jquery.com/topic/paste-event-get-the-value-of-the-paste#14737000004101955

+0

它的工作原理!你能解釋一下什麼'e.preventDefault(); alert(e.originalEvent.clipboardData.getData('Text'));'do?謝謝! – Dave

+0

'e.preventDefault(); '是爲了避免默認操作,即將內容複製到輸入框。我們不需要執行,而是我們需要粘貼刪除空格的值 –

+0

'e.originalEvent.clipboardData.getData('Text')'用於獲取剪貼板內容 –

2

使用setTimeout,這會延遲檢查以便檢索值。 看看吧here

$(document).on('paste', '#pasteIt', function() { 
    setTimeout(function() { 
     alert($("#pasteIt").val()); 
     var withoutSpaces = $("#pasteIt").val(); 
     withoutSpaces = withoutSpaces.replace(/\s+/g, ''); 
     $("#pasteIt").val(withoutSpaces); 
    }, 1); 
}); 
+0

這不是工作.. – Dave

+0

它的確如此,但Pranav的解決方案是一個更好的解決方案。嘗試一下。 – TheOnlyError

+0

您必須使用'.val',而不是'.text'來設置值 –

0

所以,你要這樣:

$(document).on('paste', '#pasteIt', function(e) { 
 
    window.setTimeout(function() { 
 
    var withoutSpaces = $("#pasteIt").val(); 
 
    withoutSpaces = withoutSpaces.replace(/\s+/g, ''); 
 
    $("#pasteIt").val(withoutSpaces); 
 
    }, 1); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<html> 
 
<span>Enter: </span> 
 
<input id="pasteIt"> 
 

 
</html>