【问题标题】:Copy data from one input to another using jQuery bind [duplicate]使用jQuery绑定将数据从一个输入复制到另一个[重复]
【发布时间】:2019-02-20 12:52:16
【问题描述】:

我的表单上有 2 个字段需要填写相同的数据。

当您在此处输入时:

<?php $value = (isset($lead) ? $lead->name : ''); ?>
        <?php echo render_input('name','lead_add_edit_name',$value); ?>

这是我们更新的相同信息:

<?php $value = (isset($lead) ? $lead->company : ''); ?>
        <?php echo render_input('company','lead_company',$value); ?>

我找到了这段代码,但是我无法让它工作:

    $("#thing1").bind('input', function () { var stt = $(this).val(); $("#thing2").val(stt); });

有什么想法吗? 谢谢

【问题讨论】:

  • 尝试将其封装在$(document).ready(function(){});
  • 顺便说一句。 bind 已弃用,请使用 on
  • “无法正常工作”非常含糊。事件处理程序是否触发?您是否有两个 ID 为 thing1thing2 的输入 - 看起来应该是:$("#lead_add_edit_name").on('input', function () { var stt = $(this).val(); $("#lead_company").val(stt); });$("#name").on('input', function () { var stt = $(this).val(); $("#company").val(stt); }); - 你能提供 HTML - 而不是无用的 php 包装器正在创造任何东西......
  • 您的浏览器控制台中是否出现任何错误(例如$ not defined)。如果在 bind 代码的正上方添加 console.log($("#thing1").length) 会发生什么?如果为零,则选择器错误。您的代码是否在 HTML 呈现之前运行?如果是这样,请在准备好的文档中添加(根据第一条评论)

标签: php jquery html forms


【解决方案1】:

您需要在表单字段上绑定正确的 DOM 事件。

首先,在这种情况下,确定您要复制数据的两个字段(起点和终点)。在您的情况下,您似乎正在使用一种 PHP 框架(wordpress 主题?),它使用 render_input 函数来呈现表单输入字段。

假设该函数的第一个参数代表字段的名称,您将通过以下选择器选择字段:

$("input[name=name]")
$("input[name=company]")

知道这一点后,您现在需要在更改值时拦截第一个字段上的 DOM 事件,因此正确的事件应该是“change”。 正如@Rahul 所说,正确的听众应该是'on',而不是'bind'。

$("input[name=name]").on('change',function(){...});

最后,当事件触发时,您只需将元素的值复制到另一个元素。

$("input[name=name]").on('change',function(){
    var fieldValue = $(this).val();
    $("input[name=company]").val(fieldValue);
});

真正的最后,正如@Quasimodo 的克隆所说,将所有代码封装在一个文档就绪触发函数中,这样您就可以确保它会在表单字段实际在页面中可用后执行。

$(document).ready(function(){
    $("input[name=name]").on('change',function(){
        var fieldValue = $(this).val();
        $("input[name=company]").val(fieldValue);
    });
});

【讨论】:

  • 正确 事件实际上是 OP 所拥有的 input(无论如何都赞成 :))
  • 感谢@freedomn-m,情况并非如此,但如果表单字段将通过代码(而不是 UI)更改,最好听一个“更改”事件,因为这样还会拦截非用户所做的更改。
  • 值得回顾的输入事件:developer.mozilla.org/en-US/docs/Web/Events/input “与input 不同,change 事件不一定会在每次更改元素值时触发。” - 很好地输入处理代码所做的更改,而更改没有。它还结合了按键/向上/向下/更改/剪切粘贴/右键单击/等,这些更改不会因为更改通常只会在文本输入模糊时触发(根据问题“当您在此处键入时”,而不是“在您之后在此处输入并退出输入)。
  • 该 MDN vanilla JS 文档是否值得作为比 jQuery 文档更好的来源? api.jquery.com/category/events/form-events
  • jquery 文档:“.change() 方法只是.on( "change", handler ) 的简写”。 jquery docs form-events 页面(您的链接)“将事件处理程序绑定到 javascript 事件” - 所以,是的,关于 vanilla js 事件的文档比关于事件的 jquery 文档更好,它只是说“这绑定了 [vanilla]事件到处理程序”。 Jquery 也没有 .input() 速记,因为 jquery 在 input 事件存在之前停止创建速记方法以支持 .on
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2018-11-15
  • 2012-01-06
相关资源
最近更新 更多