在使用 CoffeeScript 之前等待视图完全生成

Wait for the View to be entirely generated before using CoffeeScript

我有一个带有创建输入循环的视图页面。当 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 信号,但没有检测到任何东西。为什么?

假设您从 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...

找到解决方案:

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 那样正确地制作它(粘贴代码会破坏缩进)。