【问题标题】:Questions regarding forms and php (clearing form, live refresh, multiline)有关表单和 php 的问题(清除表单、实时刷新、多行)
【发布时间】:2012-02-22 07:37:50
【问题描述】:

我有几个关于表单和 PHP 的问题,但如果我应该将它们放到不同的帖子中,我会的。

这是我的表单代码:

<form id="t-form" name="tForm" action="translate.php" method="POST">
            <div id="t-bar">
                <div class="t-select">
                    <select name="start-lang" id="choice-button">
                        <option value="english">English</option>
                    </select>
                    <label>into</label>
                    <select name="end-lang" id="choice-button" onChange="document.forms['tForm'].submit();">
                        <option value="caps"<?php if ($resLang == 'caps') echo ' selected="selected"'; ?>>CAPS</option>
                        <option value="lowercase"<?php if ($resLang == 'lowercase') echo ' selected="selected"'; ?>>lowercase</option>
                    </select>
                    <input type="submit" id="t-submit" value="Translate">
                </div>
            </div>
            <div id="t-main">
                        <textarea id="txt-source" name="t-src" autofocus="autofocus" placeholder="Type in what you would like to convert…" onChange="document.forms['tForm'].submit();"><?php echo $source; ?></textarea>
                        <input type="button" id="t-clear" onclick="this.form.elements['t-src'].value=''">

                        <textarea id="txt-result" name="txt-result" readonly disabled="disabled" placeholder="result..."><?php echo $result; ?></textarea>
                        <input type="button" id="t-copy" name="t-copy">
            </div>
        </form>

问题 1: 我目前有onclick="this.form.elements['t-src'].value=''",它会在按下按钮时清除一个文本框。是否可以在我的表单中使用相同的属性清除两个文本区域?我似乎无法在任何地方找到用 1 个按钮清除 2 个元素的答案。我不想清除表单,因为我想保留选定的下拉值,这就是我这样做的原因。

问题 2: 我该怎么做关于实现结果文本区域的实时刷新,以便用户可以简单地键入并查看结果?我已经查看了所需的 ajax 和 jquery 并且很困惑,因为大多数都没有显示如何输出到表单元素而只输出到 div。 (类似于谷歌的翻译

问题 3: 我意识到如果用户在 textarea 中换行,当他们提交翻译时,它会给他们一个 php 标头错误。有什么想法可以避免这种情况吗?这是我在表单中使用的 translate.php 文件的标题:

header("location: /?txt-result=$result&t-src=$textSource&end-lang=$outputLang");

我只是尝试将其作为学习练习,并且非常感谢对这三个问题的任何指导或答案。非常感谢您的帮助!

【问题讨论】:

  • 对于第三个问题,您必须对每个变量使用 urlencode($var)。其他两个更复杂。在第一个中,您写“我目前有....它清除了一个文本框”,那里缺少一些文本?
  • 感谢您的 urlencode 提示,工作就像一个魅力!关于问题1,我继续解决了这个问题,谢谢!
  • 您想如何识别要清除的文本框?他们应该有一个属于他们的类?或者你知道他们的身份证???
  • 第二个问题看起来很简单,你已经有了;由于您已经将表单元素的值设置为'',因此请使用类似的语句将表单元素的值设置为您找到示例的 ajax 代码的返回值。唯一的区别是您正在更改表单元素的值,而他们正在更改“div”的内部 html。

标签: php html css ajax forms


【解决方案1】:

问题 1

你应该有:

onclick="clearTextboxes();"

在 javascript 中类似:

//if you want to delete all the inputs that are of type text
function clearTextboxes(){
   var inputs = document.getElementById('t-form').getElementsByTagName('input');
   for (var control in inputs){
      if(inputs[control].getAttribute('type') == 'text'){
         inputs[control].value = '';
      }
   }
}

问题 2

这里太宽泛了,不能作为答案,你真的应该看看 jQuery 的 $.ajax,并创建一个有具体疑问的不同问题。

问题 3

使用 PHP urlencode() 函数

【讨论】:

    【解决方案2】:

    答案 1:让您的 onclick 事件调用一个为您清除这些值的函数:

    <script type="text/JavaScript">
        function clearTextareas()
        {
            this.form.elements["t-src"].value = "";
            this.form.elements["txt-result"].value = "";
        }
    </script>
    
    <input type="button" id="t-clear" onclick="clearTextareas()">     
    

    答案 2: 在源 textarea 中添加一个 onkeydown 事件以执行翻译(或任何需要执行的操作),然后将结果放入结果 textarea:

    <script type="text/JavaScript">
        function translateText()
        {
            var text = this.form.elements["t-src"].value;
            // do something
            this.form.elements["txt-result"].value = text;
        }
    </script>
    
    <textarea id="txt-source" name="t-src" autofocus="autofocus" placeholder="Type in what you would like to convert…" onkeydown="translateText()"><?php echo $source; ?></textarea>
    

    答案 3: 可能在 form 元素中的 onsubmit 事件将净化来自文本区域的输入。看看 JavaScript 的encodeURIComponent。也许这对你有用:

    <script type="text/JavaScript">
        function sanitize()
        {
            this.form.elements["t-src"].value = encodeURIComponent(this.form.elements["t-src"].value);
        }
    </script>
    

    【讨论】:

    • 非常感谢您提供明确的答案!答案 1 就像一个魅力。我没有考虑过做一个函数并包括两个调用,所以我会记住这一点! /// 答案 2 有效,但会导致刷新。我将更多地研究 Ajax 等,因此我不必刷新页面。 /// 答案 3 我从来没有听说过,所以我会去读一读。 /// 再次感谢您花时间回答!
    • 我为答案 2 发布的代码不应导致刷新。如果您用来进行翻译的代码位于某个外部服务器端脚本(我假设是 PHP)中,那么是的,您需要使用 AJAX 调用脚本而不刷新,但您可以在该位置进行 AJAX 调用上面写着// do something。一定要研究 AJAX,因为您在未来的努力中无疑会需要它。我什至建议使用库,甚至编写自己的库,以减少进行 AJAX 调用所需的大量代码。
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多