javascript
  • html
  • ruby-on-rails
  • render
  • 2015-10-19 134 views 1 likes 
    1

    我需要显示一定量的文本结果,为此我使用了一个javascript函数“toWords”。当我使用onInput或onClick时,这个函数工作的很好,但是当文档打开时我需要调用这个函数。所以这是我试过的:Rails:如何从HTML渲染中调用Javascript函数:pdf

    <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)"> 
    

    但这一切的工作,并没有任何显示。

    更新:当我从控制器中删除渲染:pdf时,它工作。所以问题是在渲染我的PDF文件时在onLoad上运行这个函数。

    +0

    你不能试穿'body'标签'onload'回调? –

    +0

    什么是text_amount方法的渲染版本?在Chrome浏览器(或者你使用的任何浏览器)中开始这个操作,并检查它是否有意义。 –

    +0

    '@ amount.to_f'可能不会返回任何东西..试着放这个,看看<%='1.0'.to_f%>'而不是'<%= @ amount.to_f%>' – Minato

    回答

    0

    我也有与渲染问题: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; 
    } 
    

    这是一个临时的解决方案,这将打开文件作为页面,当用户点击打印时,打印文件。

    不过,我建议你检查大虾:

    http://www.sitepoint.com/pdf-generation-rails/

    How to render format in pdf in rails

    +0

    非常感谢,我暂时使用你的临时解决方案,我会尝试PRAWN宝石。 –

    1

    看起来你有jquery和普通js的混合:你用getElementById定义i,然后调用jquery对象函数val()就可以了。需要在jQuery对象上调用val(),而不是i。试试这个:使用之前,如果该方法毛诗补传

    console.log(window.toWords); 
    

    加载

    function text_amount(){ 
        var i = $('#payment_text'); 
        i.val(toWords("<%= @amount.to_f %>")); 
    } 
    

    ,或者更简单地说,

    function text_amount(){ 
        $('#payment_text').val(toWords("<%= @amount.to_f %>")); 
    } 
    
    0

    检查

    的HTML页面按顺序加载脚本,如果您在使用该脚本后添加该方法,则该脚本将按顺序加载脚本未定义。

    相关问题