1

我有一个 textarea ,我在其中使用 javascript 检查上面是否写了一些东西:

if (!editorInstance.document.getBody().getChild(0).getText()) {
    do some action
}

它适用于 firefox,但在 IE9 中我收到此错误,告诉它是 null 或未定义的对象(因此 IE 不检查我的条件)。所以我尝试了:

var hasText = editorInstance.document.getBody().getChild(0).getText();
if (typeof hasText === 'undefined') {
    do some action
}

问题是它仍然停在第一行(var hasText = edit...),因为editorInstance.document.getBody().getChild(0).getText()返回 null 或 undefined

编辑

当我这样做时editorInstance.document.getBody().getChild(0).getText(),我在 textarea 中输入了所有文本,但是当没有输入文本时(我检查它以验证此字段),此代码不返回任何内容,这就是hasText变量没有按我预期的方式工作的原因。

关于如何解决它的任何想法?

4

2 回答 2

1

您需要检查您引用的每个变量和函数结果是否存在。

var firstChild = editorInstance && editorInstance.document && editorInstance.document.getBody() && editorInstance.document.getBody().getChild(0);
if (!firstChild || firstChild.getText() === '') {
    // do some action
}

&&是 Javascript 的逻辑 AND 运算符。对于这种情况,当您想要获取对象的值但对象本身可能为nullundefined时,它非常方便。

考虑以下语句:

var doc = editorInstance && editorInstance.document;

意思是一样的

var doc;
if (editorInstance) {
    doc = editorInstance.document;
} else {
    doc = editorInstance;
}

但它更短。editorInstance如果为null,则此语句不会出错。

于 2012-12-27T13:10:34.443 回答
0
 function test() {
    var editor_val1 = CKEDITOR.instances.id1.document.getBody().getChild(0).getText() ;
    var editor_val2 = CKEDITOR.instances.id2.document.getBody().getChild(0).getText() ;
    var editor_val3 = CKEDITOR.instances.id3.document.getBody().getChild(0).getText() ;

    if ((editor_val1 == '') || (editor_val2 == '') || (editor_val3 == '')) {
        alert('Editor value cannot be empty!') ;
        return false ;
    }

    return true ;
}
于 2013-10-11T12:58:15.960 回答