【发布时间】:2019-09-14 16:28:16
【问题描述】:
我有两个表单元素;一个 SELECT 下拉列表,用作 javascript 函数的输入,以及一个 TEXTAREA,它也是同一个 javascript 函数的输入。 textarea 输入需要或多或少与本地 javascript 的使用同时提交给服务器上的 PHP。理想情况下,javascript 函数和 $_POST 提交到服务器都将由同一个按钮单击触发,但我无法让它工作,因为使用 javascript 函数输入的 textarea 会阻止它被提交到服务器,反之亦然(这两个操作都需要相同的数据,显然会造成干扰。我通过在输入按钮上使用 onmouseout 属性触发 DOM submit() 到服务器,成功解决了这个问题。
我现在遇到的问题是,当 textarea 输入提交到服务器时,页面刷新会擦除输入值。我不希望这种情况发生:我希望下拉列表中的选择保持选中状态,并且输入到 textarea 的文本在提交后保留在 textarea 中。我已经尝试过使用 FORM 标记内部和外部的元素 - 页面会刷新,以任何方式擦除值。 StackExchange 上发布了许多类似的问题和建议的解决方案,但是在花了很多时间尝试其中的许多问题之后,我还没有找到适合我的解决方案。基本上,它们分为几类:阻止提交的类别,例如 preventDefault 并返回 false,以及不阻止刷新或根本不工作的类别,例如各种 javascript/jquery 提交方法。对我来说,这样的提交方法引出了一个问题,即服务器如何知道用于发送提交的方法(除了它是 GET 还是 POST)?无论用于发送它的方法如何,服务器上的 php 代码都不会收到相同的 $_POST 数组吗?它如何知道 html 表单提交、DOM 提交或 javascript/jquery 提交之间的区别?它们都会触发相同的页面刷新作为响应,这并不奇怪。
似乎肯定应该有一些简单的方法来在提交后保留表单值,因为肯定有很多次想要这样做。
附:我不是 jquery 的粉丝,我发现在创建 jquery 之前,ajax 要容易得多。也就是说,在这一点上,我将不胜感激任何有效的东西。我对 jquery 几乎不熟悉,所以对于任何使用 jquery 的响应,请举例说明在我的情况下将如何实现它(它将放置在哪里以及如何触发它)。
PreventDefault,return false,各种javascript和jquery提交,去掉FORM标签,将返回发送到隐藏的iframe
<select id="thisselection" class="sameline"><option selected>Select this</option></select>
<script>
function sendTextarea() {
document.getElementById("pform").submit();
}
</script>
<form action="" name="pform" id="pform" method="post">
<textarea id="text" class="sendbox" name="text" cols="45" rows="10">Hello world</textarea>
</form>
<input type="button" value="Send" id="pform" onclick="myFunction.speak($('#text').val(),$('#thisselection').val());" onmouseout= "sendTextarea();"
/>
一切正常,但我还没有找到一种在不触发页面刷新的情况下将 textarea 输入发送到服务器的方法。
【问题讨论】:
-
您所需要的只是对语言有一点了解和对异步和同步 javascript 有一点了解。这是一个好的开始:(stackoverflow.com/questions/748175/…)
-
你认为你可以总结一下你的问题吗?真的很难阅读描述。你可以写一个简短的描述,让你的代码来说话。
-
你需要学习
ajax它会帮助你做到这一点 -
简单总结——如何在不触发页面刷新的情况下向服务器提交文本区域?以前用过不少AJAX,但是离开这个领域好几年了,忘记了很多,而且还是jquery之前的。我使用当前的 ajax 实现(例如 jquery 实现 $.ajax 或 $.post 来解决此问题)没有任何成功。
-
您需要使用ajax调用来发布数据而不触发页面刷新
标签: javascript php