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