2012-12-27 74 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 ; 
}