在使用 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 那样正确地制作它(粘贴代码会破坏缩进)。
我有一个带有创建输入循环的视图页面。当 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 那样正确地制作它(粘贴代码会破坏缩进)。