2012-12-27 42 views
1

我有一个textarea,我使用JavaScript来检查,如果有什么东西writen它:IE9的JavaScript错误,当变量为空或未定义

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

它工作正常的Firefox,但在IE9中我得到这个错误有说服力它是一个空或未定义的对象(所以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变量不能按我期望的方式工作。

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

+1

哪部分它告诉你为空? –

+0

也许'身体'没有孩子? –

+0

或许'editorInstance'本身是空的? –

回答

1

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

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

&&是Javascript的logical AND operator。这对于这种情况非常方便,当你想获取对象的值时,但对象本身可能是nullundefined

考虑下面的语句:

var doc = editorInstance && editorInstance.document; 

这意味着同

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

但它的短。如果editorInstancenull,此声明不会出错。

+0

很好的解释@Martijn!它运作良好!谢谢! – periback2

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 ; 
}