我是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的新手。
感谢
答案 0 :(得分: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
)。
$(obj)
旨在将DOM元素参数转换为jQuery对象,但是在ajaxValidation
$(this)
调用$()
的代码中。一个或另一个可以去(在现有的jQuery对象上调用$($($('#test')))
不会造成任何损害)。例如您可以拥有$('#test')
,这与{{1}}相同。