2015-01-05 221 views
9

我試圖在視圖加載時顯示模態。類型錯誤:無法讀取未定義的屬性'childNodes'

代碼:

//View 
<div id="showCom" ng-controller="showmodalCtrl" ng-init="init()"> 

<div class="modal fade" id="companyModal" role="dialog"> 
<div class="modal-dialog"> 
    <div class="modal-content"> 
    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <h4 class="modal-title">Please Select Company</h4> 
    </div> 
    <div class="modal-body"> 
    <form> 
     <div class="form-group"> 
     <label class="control-label">Recipient:</label> 
     <input type="text" class="form-control"> 
     </div> 
    </form> 
    </div> 
    <div class="modal-footer"> 
     <button type="button" class="btn btn-primary">Submit</button> 
    </div> 
    </div> 
</div> 
</div> 

//Controller 
.controller('showmodalCtrl', ['$scope', function($scope){ 

$scope.init = function(){ 
    $('#companyModal').modal("show"); 
} 
}]) 

一切正常,並顯示模式,但我得到的控制檯上的錯誤:

Type error : Cannot read property 'childNodes' of undefined 

我不知道爲什麼這個正在發生。 此外,如果我從模態中刪除「表單」,我不會收到任何錯誤。所以我想這個問題是與表格有關,但我無法解決它。

在此先感謝。

+0

你包含'jQuery'嗎?您正在使用'$('#companyModal')'選擇器來選擇帶有'jQuery'的元素。 –

+0

@MohitPandey ..是的,我包括jquery – Zee

+0

它很難追查這個代碼的錯誤。嘗試創建它的http://jsfiddle.net/。此外,內部控制器'''是angular而不是jQuery的引用。嘗試使用'jQuery('#companyModal')'。 –

回答

2

抱歉進行編輯。您的HTML格式是否正確?檢查所有標籤是否匹配。

在你的代碼片段中,它看起來像你缺少一個關閉的div。檢查 - 關閉控制器div的那個。

39

我有同樣的問題,我設法通過在$ timeout()或一個正常的setTimeout()函數內包裝模態打開函數來解決它。

setTimeout(function(){ 
    jQuery('#messageModal').modal('show'); 
}, 0); 
+0

這個setTimeout()問題總是存在於Javascript中。我曾經遇到過很多次。無論如何,我從頭開始,現在它爲我工作,沒有超時功能。 – Zee

+1

拯救了我的生命!這應該被標記爲接受。 – lbarman

11

當試圖使用JQuery插件時,我有同樣的錯誤信息。文檔準備好後運行它解決了我的問題。該插件運行良好,但當前範圍內的角碼不是。

這是「設置超時」 - 在這個線程中,讓我嘗試這個解決方案。

解決方案對我來說:

angular.element(document).ready(function() { 
    //Angular breaks if this is done earlier than document ready. 
    setupSliderPlugin(); 
}); 
2

我也有類似的問題。它會拋出一個異常,當我試圖添加一些HTML到DOM並使用$編譯在angularJs中編譯它。

enter image description here

中HTML的是另一個指令,試圖從該頁面在頁面中添加一些DOM元素到別的地方。

我只是不得不調用該元素的.clone,然後將其移至新位置。 並且例外消失了。

$popupContent = $(attrs.popupSelector).clone(); 
$container = $('<div class="popup-container"></div>'); 
$container.append($popupContent); 
$container.hide(); 
$('body').append($container); 
3

正如AngularJS的背景中另一個解決辦法,我使用這種方法:

  1. 包括$timeout模塊中的JS控制器
  2. 運行init()功能與所有類似的初始化:

    $ timeout(init,0);

作品不錯。

相關問題