javascript - 如何在复选框中使用输入类型进行同步日志

标签 javascript html forms

我采用了这个例子中给出的代码: https://api.jquery.com/checked-selector/

数据如下:

---------------------------
|    id   |     data      |  
---------------------------
|    1    |    orange     | 
|    2    |     apple     | 
|    3    |    banana     | 
---------------------------

代码如下(HTML 和 Javascript):

<form>
  <div>
    <input type="checkbox" name="fruit" value="orange" id="orange">
    <label for="orange">orange</label>
  </div>
  <div>
    <input type="checkbox" name="fruit" value="apple" id="apple">
    <label for="apple">apple</label>
  </div>
  <div>
    <input type="checkbox" name="fruit" value="banana" id="banana">
    <label for="banana">banana</label>
  </div>
  <div class="log">Log Text</div>
  <label>Select:</label>
  <input class="one" type="text" value="" >
</form>
<script>
$( "input" ).on( "click", function() {
  $( ".log" ).html( $( "input:checked" ).val() + " is checked!" );
});
$( "input" ).on( "click", function() {
    var value = $(this).val();
    $(".one").val(value);
}).keyup();
</script>

图片如下:

The picture is as follows

当我点击数据时,输入(复选框)日志文本不同步。

可能是什么原因以及我做错了什么?

最佳答案

当您首先选中香蕉,然后选中橙色,然后取消选中橙色,或者选中橙色然后选中香蕉时,就会发生图像中呈现的场景。

我会指出几件事:

  1. 为什么您在同一选择上使用了 2 个点击事件 ($("input")) 而不是在一个函数中完成所有事情?
  2. 由于您使用了复选框,并且您的选择基于 inputinput:checked,因此当选中的复选框超过 1 个时,使用 input:checked 您仅选择第一个选中的复选框,而不是用户单击的最后一个复选框。
  3. 在第二次点击函数中,您使用了 keyup(),但我看不出这样做的理由。
  4. 由于您选择了input(这是一个标签名称),因此它会影响每个输入,包括one 输入。这意味着每次用户单击 one 输入时,都会无缘无故地调用单击函数。
  5. 由于您使用了 click 事件,因此即使您取消选中项目,也会调用 click 函数,这很奇怪(除非这是您的意图)。

在下面的片段中,我修复了上面提到的所有问题,而且简单且有效。我希望你能从中吸取教训:D

$(".checkFruit").change(function() {
  if (this.checked) {
    var value = $(this).val();
    $(".log").html(value + " is checked!");
    $(".one").val(value);
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <div>
    <input class="checkFruit" type="checkbox" name="fruit" value="orange" id="orange">
    <label for="orange">orange</label>
  </div>
  <div>
    <input class="checkFruit" type="checkbox" name="fruit" value="apple" id="apple">
    <label for="apple">apple</label>
  </div>
  <div>
    <input class="checkFruit" type="checkbox" name="fruit" value="banana" id="banana">
    <label for="banana">banana</label>
  </div>
  <div class="log">Log Text</div>
  <label>Select:</label>
  <input class="one" type="text" value="">
</form>

关于javascript - 如何在复选框中使用输入类型进行同步日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59485930/

相关文章:

javascript - 迭代数组并与 Bluebird 连接

javascript - 按名称属性动态信息列出计数数组

html - webkit-transform 在 Safari 上破坏了 z-index

JavaScript/HTML -- 变量 SetTimeout 语法

php - 使用 Oauth 发布推文

HTML5 中的 Javascript 表单验证

javascript - 为什么 JavaScript 将具有前导零的数字视为八进制

javascript - 嵌入内联 JS 脚本而不是发出 AJAX 请求。为什么?

javascript - 我如何使用 html、javascript 网络存储作为登录脚本

java - 表单不会向 servlet 发布任何值