如何从同一输入打印文本,使用 Jquery 和 Flask 动态生成多次
How to print text from the same input, dynamically generated multiple times with Jquery and Flask
我正在使用 Jquery 和 Flask 开发一个应用程序,它通过单击相应的单选按钮动态生成文本类型的输入,然后应用程序必须捕获每个输入的文本并将其打印在底部的屏幕。当我只从一个单选按钮生成一个输入,其“名称”设置如下时,应用程序完美运行:
$('#Entradas').append('<input type="text" id="name2" name="message1" placeholder="Ingresa tu mensaje">')
但是因为我可以从同一个单选按钮生成多个输入,所以每次使用单选按钮生成输入时,我都需要以某种方式使参数“名称”可变或自动递增,以便在由代码处理时Flask 它可以打印所有已生成的输入的文本。
使用以下代码,我生成了两种类型的输入,第一种带有变量名称,第二种带有固定名称,带有固定名称的输入完美地打印了它,但是带有变量名称的两个输入将它们打印为“None".
HTML-Javascript (InsertarFlask3.html)
<script type=text/javascript>
var i=0;
$(document).ready(function(){
$("#der-iz").click(function(){
var i = i+1;
$('#Entradas').append('<textarea type="text" id="name" name= "(i)" placeholder="Type
your message">'); //Input with name variable. It does not work.
$('#Entradas').append("<br>");
})
$("#ab-ar").click(function(){
$('#Entradas').append('<input type="text" id="name2" name="message2"
placeholder="Type your message">'); //Input with name fixed. It works.
$('#Entradas').append("<br>");
})
$(function() {
$('a#process_input').bind('click', function() {
$.getJSON('/background_process', {
mess1: $('textarea[name="1"]').val(),
mess2: $('textarea[name="2"]').val(),
message2: $('input[name="message2"]').val()
}, function(data) {
$("#result").text(data.result);
$("#result").append("<br>");
$("#result").append(data.result1);
$("#result").append("<br>");
$("#result").append(data.result2);
});
return false;
});
});
});
</script>
<body>
<form>
<div id="Entradas">
</div>
<br>
<a href=# id=process_input><button class='btn btn-default'>Send</button></a>
</form>
<p>
<label>
<input type="radio" name="filaint" id="der-iz" value="der-iz" >Right-Left</label>
<label>
<input type="radio" name="filaint" id="ab-ar" value="ab-ar" >Down-Up</label>
</p>
<br>
<div id=result>
</div>
</body>
烧瓶
@app.route("/")
def index():
return render_template("InsertarFlask3.html")
@app.route("/background_process")
def background_process():
lang = str(request.args.get('mess1'))
lang1 = str(request.args.get('mess2'))
lang2 = str(request.args.get('message2'))
return jsonify({'result':lang, 'result1':lang1, 'result2':lang2})
单选按钮“der-iz”生成的输入文本打印为None,单选按钮“ab-ar”生成的唯一文本被正确打印。
感谢您帮助我更正此实现。
我没用过jQuery,但我会在纯 JS 中解决这个问题,首先创建元素,然后将 id 更改为动态生成的,然后将其附加到父级,如下所示:
$("#der-iz").click(function(){
let ta = document.createElement("textarea");
ta.name = "maybesomethingdescriptive"+i.toString();
//rest of attributes
ta.classList.add("control-class") // with this you can query later over an indeterminated number of elements
document.getElementById("Entradas").appendChild(ta);
i++;
}
我相信您可以在 JQuery 中直接完成,但我无法提供该解决方案
添加 class 你可以遍历所有元素而不知道它们有多少,或者它们的名字,document.querySelectorAll(".control-class")
我正在使用 Jquery 和 Flask 开发一个应用程序,它通过单击相应的单选按钮动态生成文本类型的输入,然后应用程序必须捕获每个输入的文本并将其打印在底部的屏幕。当我只从一个单选按钮生成一个输入,其“名称”设置如下时,应用程序完美运行:
$('#Entradas').append('<input type="text" id="name2" name="message1" placeholder="Ingresa tu mensaje">')
但是因为我可以从同一个单选按钮生成多个输入,所以每次使用单选按钮生成输入时,我都需要以某种方式使参数“名称”可变或自动递增,以便在由代码处理时Flask 它可以打印所有已生成的输入的文本。 使用以下代码,我生成了两种类型的输入,第一种带有变量名称,第二种带有固定名称,带有固定名称的输入完美地打印了它,但是带有变量名称的两个输入将它们打印为“None".
HTML-Javascript (InsertarFlask3.html)
<script type=text/javascript>
var i=0;
$(document).ready(function(){
$("#der-iz").click(function(){
var i = i+1;
$('#Entradas').append('<textarea type="text" id="name" name= "(i)" placeholder="Type
your message">'); //Input with name variable. It does not work.
$('#Entradas').append("<br>");
})
$("#ab-ar").click(function(){
$('#Entradas').append('<input type="text" id="name2" name="message2"
placeholder="Type your message">'); //Input with name fixed. It works.
$('#Entradas').append("<br>");
})
$(function() {
$('a#process_input').bind('click', function() {
$.getJSON('/background_process', {
mess1: $('textarea[name="1"]').val(),
mess2: $('textarea[name="2"]').val(),
message2: $('input[name="message2"]').val()
}, function(data) {
$("#result").text(data.result);
$("#result").append("<br>");
$("#result").append(data.result1);
$("#result").append("<br>");
$("#result").append(data.result2);
});
return false;
});
});
});
</script>
<body>
<form>
<div id="Entradas">
</div>
<br>
<a href=# id=process_input><button class='btn btn-default'>Send</button></a>
</form>
<p>
<label>
<input type="radio" name="filaint" id="der-iz" value="der-iz" >Right-Left</label>
<label>
<input type="radio" name="filaint" id="ab-ar" value="ab-ar" >Down-Up</label>
</p>
<br>
<div id=result>
</div>
</body>
烧瓶
@app.route("/")
def index():
return render_template("InsertarFlask3.html")
@app.route("/background_process")
def background_process():
lang = str(request.args.get('mess1'))
lang1 = str(request.args.get('mess2'))
lang2 = str(request.args.get('message2'))
return jsonify({'result':lang, 'result1':lang1, 'result2':lang2})
单选按钮“der-iz”生成的输入文本打印为None,单选按钮“ab-ar”生成的唯一文本被正确打印。
感谢您帮助我更正此实现。
我没用过jQuery,但我会在纯 JS 中解决这个问题,首先创建元素,然后将 id 更改为动态生成的,然后将其附加到父级,如下所示:
$("#der-iz").click(function(){
let ta = document.createElement("textarea");
ta.name = "maybesomethingdescriptive"+i.toString();
//rest of attributes
ta.classList.add("control-class") // with this you can query later over an indeterminated number of elements
document.getElementById("Entradas").appendChild(ta);
i++;
}
我相信您可以在 JQuery 中直接完成,但我无法提供该解决方案
添加 class 你可以遍历所有元素而不知道它们有多少,或者它们的名字,document.querySelectorAll(".control-class")