【问题标题】:How do I process a <div> as a form <input>如何将 <div> 处理为表单 <input>
【发布时间】:2023-04-10 00:53:01
【问题描述】:

我所做的是:

HTML

<form>
    <div id="textBox" contenteditable="true" name="textBox"><?php echo $storyText; ?>
    </div>
    <textarea id="hiddeninput" name="hiddeninput"></textarea>
    <input type="submit" id="save" name="save" value="Submit"/>
</form>

Javascript

$('#save').click(function () {
    var mysave = $('#textBox').html();
    $('#hiddeninput').val(mysave);
    $("form:first").submit();
    $('#hiddeninput').append(mysave);
    alert($('#hiddeninput').val());
});

因此,警报和附加都显示正确的信息,但是当我提交时它不会将#hiddeninput 保存为 php 变量。本来我是把它当成隐藏输入法的,但我想表明不管我做什么它都不会发帖,

【问题讨论】:

  • 你有什么问题? submit() 是什么?
  • 这看起来真的很难看,因为我一直在搞砸它。我只是不知道如何提交 DIV html 作为表单值。这就是我想要的。
  • form 标签怎么了?
  • 你不能。从这个意义上说,div 不是表单的一部分。使用textarea
  • 我无法使用 textarea。我正在使用富文本编辑。

标签: php javascript jquery post


【解决方案1】:

仅凭经验,您不能以POST 的形式提交div 值。

您可以将其更改为文本区域,如果您想限制用户对其进行编辑,请将其设置为disabled

或者,您可以使用 javascript 提交表单,然后从#hiddeninput 中提取值。

【讨论】:

  • 正确,但我先附加了 id hiddeninput 的值。我试图证明它正确地附加和警告,但仍然不会提交。
  • btw... 上面的代码使用 Javascript 提交表单,我正在尝试将 html 从 #textBox 传输到 #hiddeninput,
【解决方案2】:

我相信您的表单在您的 js 代码有机会运行之前就已提交。由于您是从 jQuery 手动提交,因此请尝试阻止按钮的默认事件(也提交表单):

$('#save').click(function(e) {
    e.preventDefault();
    var mysave = $('#textBox').html();
    $('#hiddeninput').val(mysave);
    $("form:first").submit();
});

【讨论】:

  • 我同意,但这似乎仍然行不通。此时我傻眼了。没有理由追加和警报都会显示正确的信息,但是在提交时不会发布内容。也许我需要睡在这上面。
【解决方案3】:

尝试绑定提交事件而不是点击事件。可能发生的是表单在设置 textarea 的值之前提交。

$('form').submit(function(){
    var mysave = $('#textBox').html();
    $('#hiddeninput').val(mysave);
});

我使用 method="get" 测试了这个示例,并从 div 中获取了 html 以显示在 URL 中。

【讨论】:

  • 很好!!现在我只需要找出为什么它对我不起作用。这太棒了。我会进行更多测试并让你知道,但我认为你在正确的轨道上。谢谢!!!
  • 我几乎要在提交数据之前记录对 contenteditble div 的每个更改并将其移动到隐藏的输入字段。不过,这似乎有点矫枉过正。
  • 如果我是你,我会放开表单,然后使用 ajax 调用发布。
【解决方案4】:

您的代码几乎可以正常工作。 但我宁愿使用普通的&lt;input type="hidden"&gt;,并且您不需要为您的表单触发submit,只需将值放在隐藏字段中即可。

根据您的标记,稍作修改

<form action="showrequest.php">
<div id="textBox" contenteditable="true" name="textBox" style="width:300px;height:100px;">
</div>
<textarea id="hiddeninput" name="hiddeninput"></textarea>
<input type="submit" id="save" name="save" value="Submit"/>
</form>

js

$(function(){
    $('#save').click(function () {
        var mysave = $('#textBox').html();
        $('#hiddeninput').val(mysave);
    });
});

var_dump($_REQUEST) 在 php 端给出

array(2) {
  ["hiddeninput"]=>
  string(4) "test"
  ["save"]=>
  string(6) "Submit"
}

【讨论】:

  • 谢谢!在睡了一些之后,我将代码放在标题中,而不是放在 html 标记的正文中,这似乎使世界变得与众不同。我觉得很傻。
  • 尝试 1) 在表单标签中添加一个 id attr,2) 将你的 type="submit" 更改为 type="button",3) 在设置 hiddeninput 值后,在 .click() 中添加 $("#myForm").submit(); (另请注意:您的隐藏文本区域将删除任何格式,而使用隐藏输入将保留 - 无论您需要什么)
【解决方案5】:

这是提交您想要的任何 div 内容元素的通用方法(请参阅下面的注释):

<form method="post" id="f">
<div id="txt" addToForm="f" contenteditable spellcheck="true" style="height:100px;width:300px;font-family:arial,sans serif;border:1px solid black;font-weight:normal;overflow-y:auto;"
></div><br />
<input type="button" value="Go" id="btnGo">
</form>
<script type="text/javascript">
$(document).ready(function(){
    $("#btnGo").click(function(){
        $("div[addToForm]").each(function(){
            var tId=$(this).prop("id");
            $(this).after("<input type='hidden' name='"+tId+"' id='hdn"+tId+"'>");
            $("#hdn"+tId).val($(this).html());
        });
        ("#f").submit();
    });
});
</script>

注 1) 使用 &lt;input type="hidden"&gt; 保留任何格式(IE11 允许超过 FF)。如果您希望删除所有格式,包括用户按 Enter/Return 的 CFLF(即&lt;br&gt;'s),请改用&lt;textarea style="display:none;"&gt;&lt;/textarea&gt;。 注意 2) 确保首先成功完成验证,否则您将得到多个具有相同名称的输入。

【讨论】:

  • 嗯,它比那些向上的那些太复杂了
  • 当然它有更多的代码,但提供了一种动态的方式来拥有多个可格式化的伪输入。我并没有声称我的答案是最佳答案,只是更强大,无需反复试验即可实现。
猜你喜欢
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多