2015-02-23 46 views
0

我有一個包含創建輸入的循環的View頁面。當觸發blur信號時,通過CoffeeScript操作這些輸入。我想等待ruby循環生成所有的輸入,然後啓動我的腳本。它在使用輸入時起作用,但在初始化時不起作用。在使用CoffeeScript之前等待視圖完全生成

$(document).ready -> 
$('body').on 'blur', 'input', -> 
arr = [ 
    'nb_kms' 
    'parkings' 
    'trains' 
    'taxis' 
    'metros' 
    'meals' 
    'hotels' 
    'amounts' 
    'o_ns' 
    'clients' 
] 
name = $(this).attr('name').slice(0, -2) 
if jQuery.inArray(name, arr) != -1 
    total = 0 
    $('input[name=\'' + $(this).attr('name') + '\']').each -> 
    total += parseInt($(this).val()) 
    return 
    $('#' + name + 'Total').text total 
return 
$('input[name=\'' + $(this).attr('name') + '\']').first().trigger 'blur' 
return 

最後一行觸發blur信號,但沒有檢測到任何信號。爲什麼?

回答

0

找到了解決辦法:

arr = [ 
'nb_kms' 
'parkings' 
'trains' 
'taxis' 
'metros' 
'meals' 
'hotels' 
'amounts' 
'o_ns' 
'clients' 
] 

$(document).ready -> 
    $('body').on 'blur', 'input', -> 
name = $(this).attr('name').slice(0, -2) 
if jQuery.inArray(name, arr) != -1 
    total = 0 
    $('input[name=\'' + $(this).attr('name') + '\']').each -> 
    total += parseInt($(this).val()) 
    return 
    $('#' + name + 'Total').text total 
return 
alert name + '[]' 
$('input[name=\'' + name + '[]\']').first().trigger 'blur' 
return 

$(document).ready -> 
    $.each arr, (index, value) -> 
    $('input[name=\'' + value + '[]\']').first().trigger 'blur' 
    return 
return 

我不得不把我的電話trigger在第二$(document).ready。我不知道爲什麼它不在第一個裏面。 對於縮進,我很抱歉,我不知道如何使它像CoffeeScript(粘貼代碼打破縮進)一樣正確。

0

假設您從coffeescript文件中發佈了確切縮進,那麼您需要縮進$(document).ready ->行下面的$('body').on 'blur', 'input', ->處理程序。這將確保在文檔完全加載之前處理程序沒有被定義。此外,你需要再縮進處理的機身以及:

$(document).ready -> 
    $('body').on 'blur', 'input', -> 
    arr = [ 
     'nb_kms' 
     'parkings' 
     'trains' 
     'taxis' 
     'metros' 
     'meals' 
     'hotels' 
     'amounts' 
     'o_ns' 
     'clients' 
    ] 
    name = $(this).attr('name').slice(0, -2) 

    # etc... 
+0

感謝您的回答。但是我沒有發佈精確的縮進。我的就像你的,當我手動模糊輸入時,腳本就可以工作。但是在初始化時不會調用它。難道這是因爲Rails的實現方式嗎? – 2015-02-23 15:12:22

相關問題