2015-02-23 204 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

相关问题