Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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_Object_Closures_Object Properties - Fatal编程技术网

JavaScript:将函数分配给属性,该属性将在每次调用该属性时重新运行

JavaScript:将函数分配给属性,该属性将在每次调用该属性时重新运行,javascript,object,closures,object-properties,Javascript,Object,Closures,Object Properties,我正在创建一个HTML5JS表单库。其思想是将具有.form item类的元素转换为内容可编辑的div,使用元素的数据属性作为应创建的表单项类型、验证等的说明 下面的代码为单个表单项创建一个验证对象,用于检查是否满足字段值的最小长度。对象的属性包括它所应用的DOM元素(el)、字段的最小长度(minLen)、不满足该最小长度时应显示的错误消息(msgError)以及返回对象是否验证的函数(submit),如果不满足该最小长度,则显示错误消息 但是,submit属性函数始终返回false。我很确定

我正在创建一个HTML5JS表单库。其思想是将具有.form item类的元素转换为内容可编辑的div,使用元素的数据属性作为应创建的表单项类型、验证等的说明

下面的代码为单个表单项创建一个验证对象,用于检查是否满足字段值的最小长度。对象的属性包括它所应用的DOM元素(el)、字段的最小长度(minLen)、不满足该最小长度时应显示的错误消息(msgError)以及返回对象是否验证的函数(submit),如果不满足该最小长度,则显示错误消息

但是,submit属性函数始终返回false。我很确定我知道为什么,但我不确定最好的纠正方法。我相信我遇到的问题与关闭的概念有关。submit属性检查表单项元素的innerHTML的长度,并将其与minLen属性进行比较。但我认为这只发生在验证对象实例化时,此时innerHTML.length始终为0(因为表单项和验证对象必须在用户能够在字段中输入任何内容之前创建)。我应该如何修改下面的代码,以便在调用submit属性函数时重新运行它(从而检查字段的innerHTML的当前长度,而不是实例化时的长度)

但是,我不喜欢这种解决方案,因为在item.submit代码中重新指定DOM元素似乎是多余的(因为对象的el属性中已经包含该DOM元素)


所以。。。我该怎么办?我是个白痴。我将innerHTML与最小长度进行比较,而不是将innerHTML的长度与最小长度进行比较。现在它可以工作了:)

您是否尝试过
.text
而不是
.html
,我记得JS以一种奇怪的方式处理
innerHTML
。无论发生什么情况,仍然会生成false:(
function formValidateMinLen(item){
    var minLen = item.attr('data-minLen');

    this.el = item;
    this.minLen = minLen;
    this.msgError = item.attr('data-error_minLen');
    this.submit = function(){
        if(this.el.html() >= this.minLen){
            return true;
        }else{
            this.el.after('<div class="msgError">' + this.msgError + '</div>');
            return false;
        }
    }
}

item = new formValidateMinLen($('#registration-form .form-item:first'));
this.submit = function(html){
    if(html >= this.minLen){
        ...
    }

item = new formValidateMinLen($('#registration-form .form-item:first'));
item.submit($('#registration-form .form-item:first').html());