2017-06-08 20 views
0

當用戶單擊按鈕選擇單個表中的所有複選框時,我使用此代碼。

$("#workOneTable .rsvLine input[type=checkbox]").each(function() { 
    if (!$(this).prop("checked")) { 
     this.click(); 
    } 
}); 

當代碼運行時,我得到$應用程序已在進行中的錯誤,並且我沒有調用$ apply。 我必須在所選表格中的每個複選框上執行單擊操作,並將複選框所在的每一行添加到列表數組中。如果我在$ timeout中包裝這段代碼,我不會收到錯誤,但我的複選框也不會被檢查。

任何幫助,非常感謝。

編輯

這是工作代碼。

if (!$(this).prop("checked")) { 
var a = $(this); 
setTimeout(function() { 
    a.click(); 
}) 
} 
+2

不要混了jQuery和角碼在一起。如果你正在使用angular,你可以在ng-repeat中包裝input type ='checkbox'並使用ng-change/ng-checked來執行一些其他動作.. – digit

+0

@digit,我用angular和reactjs構建頁面。在單獨的模式窗口中,用戶可以選擇在特定表格中選擇具有特定類名稱的所有複選框。這就是我使用jquery來選擇這些複選框的地方。 – ayordy67

回答

1

您的點擊事件正在運行與當前摘要週期衝突的摘要循環。您可以使用setTimeout()

你可以改變這個

if (!$(this).prop("checked")) 
{ 
    this.click(); 
} 

if (!$(this).prop("checked")) 
{ 
    var a = $(this); 
    setTimeout(function(){a.click();}) 
} 
+0

我忘了補充一點,我也使用Typescript。我正在注入ng.ITimeoutService到我的ts頁面,並且我得到這個錯誤。$ timeout不是一個函數。如果我改變並使用setTimeout,那麼我得到一個錯誤this.click不是一個函數 – ayordy67

+0

使用setTimeout和$(「#yourElement」)。點擊() – hasan

+0

我已經更新了我的答案 – hasan

相關問題