【问题标题】:jQuery: Check If All Form-Fields Are PopulatedjQuery:检查是否填充了所有表单字段
【发布时间】:2017-03-28 09:01:21
【问题描述】:

我正在使用 jQuery + CoffeeScript + Pug (+ Bootstrap 4):

我有一个form,看起来像这样,但有很多(十个或更多)项目,所以单独检查它们很困难:

form(method="post")

  .form-group
    label Title
    input.form-control(name="title" type="text")

  .form-group
    label Description
    textarea.form-control(name="description")

  ...

我想在用户每次输入内容时检查是否所有input 字段都填充。目标是决定#save-按钮应该显示还是隐藏。这个#save-按钮应该只在form完全填充时显示。

我的第一次尝试是:

$(window).on 'keydown', (keydown) ->
  ...

我尝试应用 jQuery 的 each 循环,然后我尝试使用 jQuery 的 .val()-方法。但我没有找到解决办法。也许你可以帮忙。

谢谢。

编辑 2:

formElements = $ 'form input[type="text"], form input[type="number"], form textarea'

formFilled = ->
  filled = true
  formElements.each ->
    if $(this).val().length is 0
      filled = false
  filled

formElements.on 'keyup', (keyup) ->
  keyup.preventDefault()
  if formFilled()
    save.show()
  else
    save.hide()

有人知道咖啡脚本编译器是怎么做的吗??

【问题讨论】:

    标签: jquery twitter-bootstrap coffeescript


    【解决方案1】:

    首先,不要使用$(window).on('keydown'),因为这会在用户按下某个键时触发,无论他们在屏幕上的哪个位置。您需要缩小范围以形成输入。

    如果表单完全是文本字段和文本区域,您可以这样做:

    //Function will return a true or false
    function formIsComplete() {
    
        var isComplete = true;
    
        //For every text input and textarea in the form
        $('form input[type="text"], form textarea').each(function() {
            $t = $(this);
            if ($t.val().length == 0) {
                //Found an empty input
                isComplete = false;
                return false;
            }
        });
    
        //No empty inputs found
        return isComplete;
    }
    
    
    $(document).ready(function() {
    
        $saveBtn = $('#save');
    
        //Add 'keyup' event to all form text inputs and textareas
        $('form input[type="text"], form textarea').on('keyup', function() {
            if (formIsComplete()) {
                //All fields have values
                $saveBtn.show();
            } else {
                //Something was empty
                $saveBtn.hide();
            }
        });
    });
    

    注意:我已将事件从keydown 更改为keyup,只是因为keydown 在输入值更改之前触发。这意味着当用户输入第一个字符时,keydown 事件仍会将输入视为空。

    【讨论】:

    • @Timo 没问题。让我知道它是如何工作的。我会添加一些 cmets 来解释这个过程。
    • 你能稍微修改一下代码吗?我的意思是,当我在第一个输入字段中输入内容时,该按钮已显示。 :-(
    • 感谢您的提示!使用 keyup 而不是 keydown !!! :D 但它仍然无法正常工作。
    • 您确定您的实施正确吗?请参阅JSFiddle - 我编辑了我的答案以解决问题,但这是在您评论说它不起作用之前。请确保您使用的是最新版本!
    • 嘿@Santi,我做了一些代码测试,也许有解决问题的办法:formElements.each -> 运行了两次。一次使用“正确”凭据,一次为空和零。对此有什么想法吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2022-11-30
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多