我有一个带有循环的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
信号,但未检测到任何信号。为什么呢?
答案 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一样正确(粘贴代码会破坏缩进)。