Actualmente estoy trabajando en un proyecto en el que necesito llamar a una función de script en un evento. Esta función se llama cuando se pega texto en un área de texto. La función copia el texto pegado en una matriz e itera a través de la matriz en busca del valor de código del apóstrofe derecho Unicode (8217). Luego reemplaza cualquier apóstrofo correcto encontrado con una comilla simple. La función funciona como se esperaba. Sin embargo, estoy ejecutando esta función en 8 páginas diferentes y quiero limpiar mi código. Coloqué el script en un archivo js que se llama en cada página del proyecto, por lo que si se encuentran más casos, será fácil de implementar.
La función está siendo llamada con:
<script> var instructions = document.getElementById("specialInstructions"); instructions.addEventListener("paste", pasteToPlainText); </script>La función en el archivo js es:
function pasteToPlainText(event){ var plainText; var replaceList; replaceList = new Array(); //converts the pasted text to plain text if (event.clipboardData && event.clipboardData.getData){ plainText = event.currentTarget.clipboardData.getData('text/plain'); }else if (window.clipboardData){ plainText = event.currentTarget.clipboardData.getData('text/plain'); } for (var index = 0; index < plainText.length; index++){ var rightApostropheCheck = plainText.charCodeAt(index); //Unicode for right apostrophe is 8217 (Used in outlook email) //Without this conversion a right apostrophe is put on screen. // The note is unable to save with a right apostrophe if (rightApostropheCheck == 8217){ // replaces a right apostrophe with a single quote (apostrophe) replaceList.push("'"); }else{ // pushes all other text to the list that is printed to screen replaceList.push(plainText[index]); } } event.preventDefault(); if (event.clipboardData) { content = replaceList.join(""); document.execCommand('insertText', false, content); }else if (window.clipboardData) { content = replaceList.join(""); document.selection.createRange().pasteHTML(content); } }Recibo el error: TypeError no capturado: no se pueden leer las propiedades de undefined (leyendo 'clipboardData') en la primera declaración if.
Cualquier ayuda o consejo será muy apreciado. Gracias.
Actualización: encontré una solución. hacer que el detector de eventos con una declaración de enlace se asegure de que la función no se invoque durante la carga. Ese fue el problema ya que la página cargó la función fue llamada sin ninguna información. por lo que tenía errores indefinidos y errores nulos. La forma correcta de llamar a la función es la siguiente.
<script> var terms = document.getElementById("Terms"); terms.addEventListener("paste", pasteToPlainText.bind(terms)); </script>