He creado un sitio HTML / JavaScript que genera algún código de programa. Cuando se creó el código del programa, se muestra en un elemento textarea. El usuario puede presionar un botón y el código se copia en el portapapeles.

En HTML / JavaScript normal, esto funciona bien. Pero ahora lo porté a un fragmento de Webpart en SharePoint 2013.

Cuando el usuario pulsa el botón, el código se almacena correctamente como texto en el portapapeles del usuario. Pero en el mismo momento, el sitio de SharePoint se vuelve a cargar y eso restablece todas las configuraciones en el fragmento. No puedo entender por qué el código JavaScript actúa de manera tan diferente cuando se ejecuta en un fragmento en SharePoint. Este es el código:

    ...

    copy2clip = function() {
        document.getElementById('TextCASL').select();
        try {
            var successful = document.execCommand('copy');
            var msg = successful ? 'successful' : 'unsuccessful';
            console.log('Copying text command was ' + msg);
        } catch (err) {
            console.log('Oops, unable to copy');
        }
    }

    ...

</script>
<button onclick=jacascript:copy2clip();>Copy to clipboard</button>
0
Vlorian 28 oct. 2017 a las 16:35

3 respuestas

La mejor respuesta

Simplemente return false al final del controlador de clic para evitar que la página envíe:

copy2clip = function() {
    document.getElementById('TextCASL').select();
    try {
        var successful = document.execCommand('copy');
        var msg = successful ? 'successful' : 'unsuccessful';
        console.log('Copying text command was ' + msg);
    } catch (err) {
        console.log('Oops, unable to copy');
    }

    return false;
}

El comportamiento no es particular de SharePoint, pero en su caso podría estar sucediendo porque el botón está dentro de un elemento <form>. Por lo tanto, al hacer clic en él, el formulario se envía al servidor.

Alternativamente, configurar type="button" en el marcado del botón también debería estar bien:

<button type="button" onclick=jacascript:copy2clip();>Copy to clipboard</button>
1
Nisarg 28 oct. 2017 a las 13:40

Cuando utiliza la etiqueta "botón", por defecto enviará el formulario independientemente de lo que haya en su función. Por lo tanto, se actualizará la ventana actual del navegador. Pero si usa "input type = button", no enviará el formulario por defecto, verificará la acción de la función.

0
Shiv Patne 21 ene. 2020 a las 12:03

La página se recarga cuando agrego la función de copia en la página de administración personalizada de django.

Incluso si no escribo nada en la función onclick, la página también se recarga.

Entonces la razón no es la función.

Cuando cambio el elemento button a elemento input, funciona.

<input type="button" onclick="myCopy('{obj.id}')" value="Copy"/>
0
aishenghuomeidaoli 10 ene. 2020 a las 05:01