flask-javascript动态添加输入框以调用函数

nukf8bse  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(361)

我想在我的程序中实现特定的功能,我目前正在使用flask将两个数字相加。我有一个html文件来接受这两个输入。一个input num函数,用于获取这两个数字并将其传递给另一个函数,然后该函数将被添加到一起并保存到日志文件中,该日志文件将显示在另一个html页面上。我知道有一种更简单的方法可以做到这一点,但我正在以这种方式构建程序的功能,因为它将在以后用于更大更复杂的程序。为了简单起见,我使用了这个例子。
我已经实现了java脚本和html文件,以使功能正常工作。我已经在codepen.io中测试了它,但在 flask 中尝试时它不起作用。当我点击“添加新字段”按钮时,它什么也不做。
我有js文件在文件夹中,但仍然没有运气
我希望它添加2个新字段,将使用该函数作为现有字段。
例如,能够在同一页上添加多组数字。
有人能帮忙吗?
main.py

import sys
from flask import request, render_template, Flask, session, redirect, url_for

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hjshjhdjah kjshkjdhjs'

@app.route('/', methods=['GET', 'POST'])
def inputNum():
    if request.method == 'POST':
        num1 = request.form.get('num1')
        session["num1"] = num1
        num2 = request.form.get('num2')
        session["num2"] = num2
        return redirect(url_for("results"))
    return render_template("inputNum.html")

@app.route('/results')
def results():
    if "num1" and "num2" in session:
        num1 = session["num1"]
        num2 = session["num2"]
        old_stdout = sys.stdout
        log_file = open("message.log", "w")
        sys.stdout = log_file
        addNum(num1, num2)
        sys.stdout = old_stdout
        log_file.close()
        with open("message.log", "r") as f:
            content = f.read()
        return app.response_class(content, mimetype='text/plain')
    else:
        return redirect(url_for('inputNum'))

def addNum(num1, num2):
    num1 = int(num1)
    num2 = int(num2)
    sum = num1 + num2
    print(sum)

if __name__ == '__main__':
     app.run(debug=True)

inputnum.html

<script src="{{url_for('static', filename='inputFields.js')}}"></script>

<button id="btn"> Add new fields </button>
<form action="{{ url_for("inputNum")}}" method="post">
  <div id="ip_div">

<label for="num1">Num1:</label>
<input type="number" id="num1" name="num1" placeholder="num1">
<label for="num2">num2:</label>
<input type="number" id="num2" name="num2" placeholder="num2">
  </div>
  <br>
  <button type="submit">Submit for addition</button>
</form>

results.html

<!DOCTYPE html>
<title xmlns="http://www.w3.org/1999/html">
    <head>
        <meta http-equiv="refresh" content="10">
        <title>Results</title>
    </head>
    <body>
        <h1>Log file ...</h1>
        <script>
           // function for adjusting iframe height to log size
            function resizeIframe(obj) {
              obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px';
            }
          </script>
        <iframe src="{{ url_for('results') }}" frameborder="0" style="overflow:hidden;width:100%" width="100%" frameborder="0" scrolling="no" onload="resizeIframe(this)"></iframe>
    </body>
</html>

inputfields.js

var num = 2; // ads 2 fields at a time

var createInputs = function () {
  $("#ip_div").append('<form id="form"></form>');
  for (var i = 0; i < num; i++) {
    $("#form").append("<input></input>");
  }
};

$("#btn").click(function () {
  createInputs();
  //create unique ID for each input
  $("#form")
    .find("input")
    .each(function (i) {
      $(this).attr("id", "num" + i);
      $(this).attr("placeholder", "num" + i);
    });
});

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题