Rails:如何在渲染中从 HTML 调用 Javascript 函数 :pdf
Rails: How to call a Javascript function from HTML in render :pdf
我需要显示金额的文本结果,为此我使用了 javascript 函数 "toWords"。当我使用 onInput 或 onClick 时,此函数效果很好,但我需要在文档打开时调用此函数。所以这就是我的尝试:
<div class="label-field-pair3-text-area">
<p id="demo"></p>
</div>
<script type='text/javascript'>
document.getElementById("demo").innerHTML = window.toWords("<%= @amount.to_f %>");
..... </script>
但这不起作用。我也试过这个:
j(document).ready( function(){ text_amount();});
function text_amount(){
var i= getElementbyId('payment_text');
i.val(toWords("<%= @amount.to_f %>"));}
还有这个:
<div class="label-field-pair3-text-area" id='payment_text' onload = "text_amount(150)">
但是 none 有效,但没有显示任何内容。
更新:当我从控制器中删除 render :pdf 时,它起作用了。所以问题出在 运行 这个函数 onLoad 渲染我的 PDF 文件时。
看起来你混合了 jquery 和常规 js:你用 getElementById 定义 i
然后调用 jquery 对象函数 val()
. val()
需要在 jquery 对象上调用,而 i
则不需要。试试这个:
function text_amount(){
var i = $('#payment_text');
i.val(toWords("<%= @amount.to_f %>"));
}
或者,更简单地说,
function text_amount(){
$('#payment_text').val(toWords("<%= @amount.to_f %>"));
}
检查toWords方法是否被
加载
console.log(window.toWords);
使用前
html页面顺序加载脚本,如果在使用后添加方法,则未定义。
我也遇到了渲染 :pdf 的问题,所以我改用这个:
<%= link_to t('print'), "#", {:class => 'grey-button-large themed_bg themed-dark-hover-background', :href=>'javascript:printReceipt()'}%>
然后在脚本中:
function printReceipt()
{
//$('#page-yield').printElement();
var divName = "page-yield";
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
这是一个临时解决方案,它将您的文件作为一个页面打开,当用户点击打印时,它就会被打印出来。
但是,我建议你检查PRAWN:
http://www.sitepoint.com/pdf-generation-rails/
How to render format in pdf in rails
我需要显示金额的文本结果,为此我使用了 javascript 函数 "toWords"。当我使用 onInput 或 onClick 时,此函数效果很好,但我需要在文档打开时调用此函数。所以这就是我的尝试:
<div class="label-field-pair3-text-area">
<p id="demo"></p>
</div>
<script type='text/javascript'>
document.getElementById("demo").innerHTML = window.toWords("<%= @amount.to_f %>");
..... </script>
但这不起作用。我也试过这个:
j(document).ready( function(){ text_amount();});
function text_amount(){
var i= getElementbyId('payment_text');
i.val(toWords("<%= @amount.to_f %>"));}
还有这个:
<div class="label-field-pair3-text-area" id='payment_text' onload = "text_amount(150)">
但是 none 有效,但没有显示任何内容。
更新:当我从控制器中删除 render :pdf 时,它起作用了。所以问题出在 运行 这个函数 onLoad 渲染我的 PDF 文件时。
看起来你混合了 jquery 和常规 js:你用 getElementById 定义 i
然后调用 jquery 对象函数 val()
. val()
需要在 jquery 对象上调用,而 i
则不需要。试试这个:
function text_amount(){
var i = $('#payment_text');
i.val(toWords("<%= @amount.to_f %>"));
}
或者,更简单地说,
function text_amount(){
$('#payment_text').val(toWords("<%= @amount.to_f %>"));
}
检查toWords方法是否被
加载console.log(window.toWords);
使用前
html页面顺序加载脚本,如果在使用后添加方法,则未定义。
我也遇到了渲染 :pdf 的问题,所以我改用这个:
<%= link_to t('print'), "#", {:class => 'grey-button-large themed_bg themed-dark-hover-background', :href=>'javascript:printReceipt()'}%>
然后在脚本中:
function printReceipt()
{
//$('#page-yield').printElement();
var divName = "page-yield";
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
这是一个临时解决方案,它将您的文件作为一个页面打开,当用户点击打印时,它就会被打印出来。
但是,我建议你检查PRAWN:
http://www.sitepoint.com/pdf-generation-rails/
How to render format in pdf in rails