Al presionar el botón "publicar hilo", quiero que agregue texto personalizado al área de texto según el menú desplegable seleccionado en un cuadro de selección. Tengo este script en el encabezado de la plantilla newthread, pero aún así no funcionará al enviarlo. ¿Estoy haciendo algo mal?
function setText() { var tasks = document.getElementById('tasks'); var message = document.getElementById('message'); message.value = tasks.value + message.value; } <form> <select id="tasks"> <option value="texthere 1">forage</option> <option value="texthere 2">attack</option> <option value="texthere 3">defend</option> </select><br/> <input type="submit" class="button" name="submit" value="Post reply" onClick="setText();" tabindex="3" accesskey="s" /><br/> <textarea id="message" name="message" rows="20" cols="70" tabindex="2">message</textarea> </form>Creo que el problema es que está enviando el formulario y configurando el texto al mismo tiempo. Intenta usar e.preventDefault(); para evitar que se envíe el formulario y ejecute su código antes del envío del formulario.
mira esto https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_textarea_value2
Primero seleccione su formulario, luego agregue un detector de eventos "enviar" al formulario y agregue una función de devolución de llamada con evento de paso, dentro del método event.preventDefault() de la función de devolución de llamada y su función setText().
const form = document.querySelector("form"); form.addEventListener("submit", e => { e.preventDefault(); setText() }) function setText() { var tasks = document.getElementById('tasks'); var message = document.getElementById('message'); message.value = tasks.value + message.value; } <form> <select id="tasks"> <option value="texthere 1">forage</option> <option value="texthere 2">attack</option> <option value="texthere 3">defend</option> </select><br /> <input type="submit" class="button" name="submit" value="Post reply" tabindex="3" accesskey="s"><br /> <textarea id="message" name="message" rows="20" cols="70" tabindex="2">message</textarea> </form>