TypeError运行jQuery Code Snippet

时间:2014-07-11 08:26:40

标签: jquery

我是jQuery的新手。 我正在阅读一本书中的以下代码片段。我尝试运行它但得到以下错误。

"未捕获的TypeError:无法读取属性' toLowerCase'未定义"

我使用了console.log()并发现了对象/元素给了" ajaxValidation()"未定义。错误来自" ajaxValidation()" 。 " $(this)"在document.ready()事件中作为参数给出,但我收到TypeError。代码背后的想法是当一个键被按下时需要"需要"文本字段,该文本字段被赋予" ajaxValidation()"以" $(this)"的形式用于验证。

     var ajaxValidation = function(obj){

                var $this = $(obj);
                var param = $this.attr('name');
                var value = $this.val();
                $.get("inputValidation.php", {'param':param, 'value': value}, function(data){
                    if(data.status == "OK"){
                        validationRequiredInputs();
                    }else {
                        $this.addClass('failed');
                    }
                }, "json");
            }


 var validationRequiredInputs = function(){
        var numberOfMissingInputs = 0;
        $('.required').each(function(index){
            var $item = $(this);
            var itemValue = $item.val();
            if(itemValue.length){
                $item.removeClass('failed');
            }else {
                $item.addClass('failed');
                numberOfMissingInputs++;
            }
        });

    $(document).ready(function(){
            var timerId = 0;
            $('.required').keyup(function() {
                clearTimeout (timerId);
                timerId = setTimeout(function(){
                    ajaxValidation($(this));
                }, 200);
            });
        });

html表单是::

<form class="simpleValidation">
    <div class="fieldRow">
        <label>Title *</label>
        <input type="text" id="title" name="title" class="required" />
    </div>
    <div class="fieldRow">
        <label>Url</label>
        <input type="text" id="url" name="url" value="http://" />
    </div>
    <div class="fieldRow">
        <label>Labels</label>
        <input type="text" id="labels" name="labels" />
    </div>
    <div class="fieldRow">
        <label>Text *</label>
        <textarea id="textarea" class="required"></textarea>
    </div>
    <div class="fieldRow">
        <input type="submit" id="formSubmitter" value="Submit" disabled="disabled" />
    </div>
</form>

1)你能告诉我导致这个问题的原因吗?

2)有人也可以向我解释为什么会有&#34; $&#34;面对&#34; obj&#34; &#34; ajaxValidation()&#34;?

中的参数

请上面的所有代码都来自我正在阅读的书。我是一个学习jQuery的新手。

感谢

1 个答案:

答案 0 :(得分:1)

Re 1:

以下代码在this回调中使用了错误的setTimeout

$(document).ready(function(){
        var timerId = 0;
        $('.required').keyup(function() {
            // Keep a copy of the object that caused the event
            var THIS = this;
            clearTimeout (timerId);
            timerId = setTimeout(function(){
                // Pass the DOM object that caused the event ($() is not needed here)
                ajaxValidation(THIS);
            }, 200);
        });
    });
this调用内的

setTimeout实际上是调用的对象(在这种情况下this可能是window)。

Re 2:

$(obj)旨在将DOM元素参数转换为jQuery对象,但是在ajaxValidation $(this)调用$()的代码中。一个或另一个可以去(在现有的jQuery对象上调用$($($('#test')))不会造成任何损害)。例如您可以拥有$('#test'),这与{{1}}相同。