【发布时间】:2025-12-13 10:25:01
【问题描述】:
我正在尝试在 mootools 1.11 中进行自动完成。一切正常,但我无法检查是否
this.selectel.getNext()
为 null 或其他。 Firebug 为每个元素输出 [li],为不存在的元素输出 [null] i 通过 getNext();
我看到有些人只是在做:
if(this.selectel.getNext()) {...
但这在这里不起作用,因为我总是得到空对象。这里肯定发生了一些非常愚蠢的事情......
这里有一些解决问题的代码:
this.selectel = $$('ul.results').getFirst();
...
onCommand: function(e, mouse) {
if (e.key && !e.shift) {
switch (e.key) {
case 'up':
this.selectel.getPrevious().addClass('active');
if(this.selectel) this.selectel.removeClass('active');
this.selectel = this.selectel.getPrevious();
e.stop();
return;
case 'down':
var test = this.selectel.getNext();
console.log(typeof(test));
if(this.selectel.getNext() != null) { // not working
this.selectel.getNext().addClass('active');
if(this.selectel) this.selectel.removeClass('active');
this.selectel = this.selectel.getNext();
}
e.stop();
return;
}
}
【问题讨论】:
-
你在 typeof 测试输出中得到了什么?
console.log(this.selectel)是您期望的元素吗?是甚至是this指向类实例或窗口对象(取决于this.fireEvent("command")的绑定方式 -this.fireEvent("command", this);?)顺便说一句,这不是错误,而是:你不需要评估如果选择器直接为空,您可以只执行if (this.selectel.getNext()) { ... },如果已定义,则评估为真,如果为空,则为假。 element.getNext() 也接受一个选择器,所以你可以这样做.getNext("div.inactive") -
这是类实例。就像我上面所说的 console.log(this.selectel) 输出 [null]。我也尝试过 (this.selectel.getNext()) { ... } 但我得到的不是 null 而是 [null],一个我无法处理的 null 对象。
-
如果
this.selectel输出 null 则此范围未绑定到类实例。如果它找不到元素,它肯定不会找到它旁边的元素。您需要向我展示发生fireEvent("command")的课程本身(可能在keyup 或其他东西上)。 附言。你从来没有说过 this.selectel 是 null 但 this.selectel.getNext() - 但它是一个链,从原始元素开始并回复原始元素是对 dom 对象的正确引用 -
我猜你不明白。 this.selectel 在最后一个 li 元素上输出 [null] NOT null。上下自动完成结果工作正常。所以解析 UL 元素是有效的。只有最后一个 LI 元素会引起麻烦。当我得到下一个(不存在的)LI 元素的 [null] 时。
-
够公平的。
if (!this.selectEl.getNext()) { e.stop(); return;} .. code here that uses the getNext (cache it)不起作用吗?如果为空,它将评估为假。如果一切都失败了,请在 jsfiddle 上发帖,我会看看...
标签: javascript mootools