在使用CoffeeScript之前,请等待View完全生成

时间:2015-02-23 13:49:23

标签: ruby-on-rails coffeescript

我有一个带有循环的View页面,可以创建输入。触发blur信号时,通过CoffeeScript操作这些输入。我想等待ruby循环生成我的所有输入,然后启动我的脚本。它在使用输入时有效,但在初始化时不起作用。

$(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信号,但未检测到任何信号。为什么呢?

2 个答案:

答案 0 :(得分:0)

假设您发布了coffeescript文件中的确切缩进,那么您需要在$('body').on 'blur', 'input', ->行下方缩进$(document).ready ->处理程序。这将确保在文档完全加载之前未定义处理程序。此外,您还需要缩进处理程序的主体:

$(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...

答案 1 :(得分: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一样正确(粘贴代码会破坏缩进)。