【问题标题】:How to change flask form output with JavaScript如何使用 JavaScript 更改烧瓶表单输出
【发布时间】:2018-09-12 21:00:49
【问题描述】:

我正在创建一个简单的烧瓶应用程序,它根据添加到烧瓶表单的数据生成输出。我想要实现的是编辑该输出并同时根据该更改更新其他值的可能性。应用程序正在计算工作时间,所以我需要允许编辑开始工作等字段。然后这些变化需要反映每天总小时数的总和。 这是输出页面:

在上面的示例中,我想将工作开始时间更改为 10:00,并希望总小时数从 8 小时减少到 7 小时。 我希望你们知道我的意思。

这是我使用的 div 表的示例:

<div class="rTableRow" align="center">
  <div class="rTableCell">{{ day['day'].strftime("%d") }}</div>
  <div class="rTableCell">{{ day['day'].strftime("%a") }}</div>
  <div class="rTableCell" contenteditable="true">{{ day['absence'] }}</div>
  <div class="rTableCell" contenteditable="true">{{ day['start-hour'] }}</div>
  <div class="rTableCell" contenteditable="true">{{ day['end-hour'] }}</div>
  <div class="rTableCell" contenteditable="true">{{ day['additional-break'] }}</div>
  <div class="rTableCell" contenteditable="true">{{ day['overtime'] }}</div>
  <div class="rTableCell" contenteditable="true">{{ day['daily-total'] if day['daily-total'] != 0 else '-' }}</div>

有没有办法用 JavaScript 做到这一点?所有数据都在视图级别进行处理并传递给模板。

非常感谢您的帮助。

【问题讨论】:

    标签: javascript python flask jinja2 flask-wtforms


    【解决方案1】:

    TL;DR:链接到 jsFiddle:http://jsfiddle.net/bkjwgy10/36/

    这是一个关于如何通过javascript 进行操作的示例。我假设的一些假设是

    • 您验证了输入数据
    • 你加入了jQuery。您也可以只通过javascript 进行操作,但您需要添加eventListeners。可以在 here 找到有关 jQuery 的文档。
    • 您有自己的 CSS 来创建表格 - jsFiddle 将显示自上而下的格式,因为我没有包含任何 CSS。

    一些注意事项:

    • 您可以使用moment.js,而不是编写自己的小时数计算方法——文档是here
    • 考虑使用另一个名为value 的属性,该属性包含将由 Flask 使用的信息,但格式不适合显示给查看者。观众会看到不同的东西,但价值是一样的。
    • 我使用$().closest() 而不是$().parent()。两者产生相同的结果,但因为您指定了 class="rTableCell"class="rTableRow" 而不是 &lt;tr&gt;&lt;td&gt;,我认为这是合适的。
    • 您可以轻松添加更多列;我认为它已修复并以这种方式编写计算。

    所以javascript,你可以在document.readyDOMContentLoaded中添加这个

    $('.rTableCell').focusout(function(e) {
        /* insert validation here */
    
        // yield selected row
        var row = $(this).closest('.rTableRow');
        //alternative: console.log($(this).parent())
    
        // get children (cells in row)
        var rcells = $(this).closest('.rTableRow').children();
    
        // set HTML to this
        rcells.last().html(calculate_hours(rcells));
    })
    

    【讨论】:

    • 感谢您的回复,我会尽力让您知道伙计!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多