【问题标题】:enabling button when all the fields are filled up填写所有字段时启用按钮
【发布时间】:2014-04-16 10:18:51
【问题描述】:

我正在使用 knockout.js 进行数据绑定。实际上有一个表单,其中一些字段接受名称、数字、电子邮件等。假设如果任何一个字段未填写并且按下保存按钮,则该按钮转到禁用状态。直到现在它工作正常。

现在,如果我填写空白字段,那么我想再次启用该按钮,但我不知道该怎么做。任何人都可以帮我怎么做吗?

以下是js代码

self.newPatient = ko.asyncCommand({

    execute: function (complete) {
        var isValid = $('#addPatientForm').parsley('validate');
        if (isValid) {
            var patientJson = ko.toJSON(self.patient());
            formdata.append("json", patientJson);
            //self.enableButton(false); 
            var imagepath = $.ajax({
                url: projectUrl + "newPatient",
                type: "POST",
                data: formdata,
                processData: false,
                contentType: false,
                success: function (res) {
                    formdata = new FormData();
                    imagepath = res;
                    var length = self.patients().length;
                    var patient = self.patient();
                    //  self.enableButton(true); 
                }
            });
            $('.alert-patient-success').show();
            self.patients.removeAll();
            self.getPatients();
            /* $.when(self.patients.push(self.patient()),self.patient(new Patient()),self.dirtyFlag1().reset(),$('#patientTabs a:last').tab('show')) 
.always(complete);*/
        }
    },
    canExecute: function (isExecuting) {
        return !isExecuting && isDirty() && isValid();
    }
});

这是html代码

<script id="patientMetadataTemplate" type="text/html"> 
<form id="addPatientForm" data-validate="parsley"> 
<div class="control-group"> 
<label class="control-label" for="inputIcon">Name :</label> 
<div class="controls"> 
<div class="input-prepend" > 
<span class="add-on"><i class="icon-hand-right"></i></span> 
<input class="span8" type="text" data-bind="value: name" data-required="true" data-trigger="change" name="name"> 
</div> 
</div> 
</div> 
<div class="control-group"> 
<label class="control-label" for="inputIcon">Address :</label> 
<div class="controls"> 
<div class="input-prepend"> 
<span class="add-on"><i class="icon-hand-right"></i></span> 
<input class="span8" name="address" type="text" data-bind="value: address" data-required="true" data-trigger="change"> 
</div> 
</div> 
</div> 

我也有一个fiddle 用于上述 js 和 html。

【问题讨论】:

  • 1) 添加一个在任何输入更改时触发的处理程序 2) 在该处理程序中,检查所有字段是否有值 3) 启用提交按钮,请参阅此链接:stackoverflow.com/questions/2469999/…

标签: javascript jquery knockout.js


【解决方案1】:

类似这样的:

var formCompleted = false;
$('input[type="submit"]').attr('disabled','disabled');

$(":text, :file, :checkbox, select, textarea").change(function() {
  formCompleted = validateForm();   
  if(formCompleted){
    $('input[type="submit"]').removeAttr('disabled');
  }
});

function validateForm() {
  var isValid = true;
  $('.form-field').each(function() {
    if ( $(this).val() === '' )
      isValid = false;
    });
  return isValid;
}

首先禁用按钮,在每个表单元素更改时检查它是否已填写,然后删除禁用的属性。我还没有对此进行测试,但它应该能让你朝着正确的方向开始。

【讨论】:

  • 你用过form-field,你能告诉我这是指哪个吗?
  • 这是一个你应该添加到每个表单域的类。这是获取每个表单元素的另一种方法。刚刚意识到我没有链接到那个页面,所以我“偷”了这个功能:stackoverflow.com/questions/18907198/…
  • 问题是在我的项目中使用了敲除dirtyflag,并且正在发生这种情况。如果我使用jquery代码,按钮被禁用但是当我按下按钮时,控制不会self.newPatient = ko.asyncCommand({....}
  • 你不能从 jquery 代码中调用敲除功能吗?我没有使用淘汰赛,所以我会将“有用”的 cmets 留给其他人:-)
猜你喜欢
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多