Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从一个输入到另一个输入动态生成值_Javascript_Jquery - Fatal编程技术网

Javascript 从一个输入到另一个输入动态生成值

Javascript 从一个输入到另一个输入动态生成值,javascript,jquery,Javascript,Jquery,我正在尝试使用jQuery将我的一个输入标记动态复制到另一个。换句话说,当用户键入第一个输入时,第二个输入显示用户正在键入的内容(仅当选中复选框时) 第二个输入只应在第一个输入中输入内容并选中该框时显示 小提琴的链接: 这就是我到目前为止所做的: <body> <input type="password" id="firstInput" /> <input type="hidden" id="secondInput" /> <br/>

我正在尝试使用jQuery将我的一个输入标记动态复制到另一个。换句话说,当用户键入第一个输入时,第二个输入显示用户正在键入的内容(仅当选中复选框时)

第二个输入只应在第一个输入中输入内容并选中该框时显示

小提琴的链接:

这就是我到目前为止所做的:

<body>
  <input type="password" id="firstInput" />
  <input type="hidden" id="secondInput"  />
  <br/>
  <input type="checkbox" id='checkbox'/>

<script>
  $('#checkbox').change(function(){
    if ($(this).prop('checked')) {
        $(secondInput).prop('type', 'text');
        $(firstInput).on('input', function () {
            $(secondInput).val($(firstInput).val());
        });
    } else {
        $(secondInput).prop('type', 'hidden');
    }

  });
</script>


$('#复选框')。更改(函数(){ if($(this.prop('checked')){ $(secondInput).prop('type','text'); $(firstInput).on('input',函数(){ $(secondInput.val($(firstInput.val()); }); }否则{ $(secondInput).prop('type','hidden'); } });

然而,在这类工作中,我面临以下问题:

1.如果我将复选框默认为“checked”,jQuery将不会看到更改事件,因此如果我开始键入,第二次输入将不会显示任何内容

2.当我开始打字时,第二个输入出现了。如果删除第一个输入中的所有内容,第二个输入将不会隐藏

3.与第二个问题类似的问题。如果我将checkbox checked属性默认为false,如果我将其更改为checked,则会显示隐藏的输入,即使我没有键入任何内容

4.如果我不选中复选框,然后开始键入内容,如果我将复选框更改为选中,第二次输入将不会显示我键入的内容,因为change()事件发生在之后


建议?

我认为这符合您的要求

它只对复选框和主输入使用一个事件处理程序

  var $check = $('#4').change(updateSlave),
      $slave = $('#secondInput'),
      $master = $('#firstInput').on('input', updateSlave);


  function updateSlave(){
    var showSlave = $master.val() && $check.is(':checked');
    // not sure about value when hidden
    $slave.prop('type', showSlave ? 'text' : 'hidden').val(showSlave ? $master.val() : '')

  }

您可以使用事件委派,
.toggleClass()


plnkr

那么,如果用户在第一个输入中键入,第二个输入应该自动显示?或者,第二个输入只应在第一个输入中输入某些内容并选中该框时显示?您已经说明了您的“问题”,但是您没有清楚地解释您要创建的行为。@DavidThomas应该是“只有在第一个输入中输入了某些内容并且选中该框时,第二个输入才会显示”。我将更新我的帖子。关于
#secondInput
是否应将value
设置为空字符串,这是一个很好的观点;关于这个问题,你不完全清楚吗?尽管第4点似乎表明文本应该保留?@guest271314第4点看起来很难看。我没有注意到那个。不太清楚如果用户在选中复选框后再次开始键入,会发生什么情况
var first = $("#firstInput"), second = $("#secondInput");

$(document).on("input", "#firstInput.checked", function() {
  second.val(this.value);
});

$("#4").change(function() {
  var checked = this.checked;
  first.toggleClass("checked", checked);
  second.prop("type", checked ? "text" : "hidden");
});