选择要在表单中提交的字段
Choose which fields to submit in a form
我在我的 python cgi 代码中使用隐藏表单将信息传递到另一个 cgi 文件(我们就称它为 printer.cgi)以打印表单中的信息。由于本教程,我还制作了可点击的文本 link,它们都指向同一个打印机文件:
http://www.thesitewizard.com/archive/textsubmit.shtml
隐藏形式包含一个巨大的嵌套字典,该字典已使用 JSON 编码为文本。然后打印机文件将该字符串转回字典对象。根据单击的 link,打印机文件决定要打印字典中的哪些信息。但是,对整个字典进行解码和编码效率很低,而且确实会减慢我的程序。相反,我想通过隐藏形式提交较小的字典对象来打印而不是整个字典。这是我目前正在做的一个例子:
JavaScript代码:
function getDetails(selectedField)
{
document.Results.resultsToPrint.value = selectedField;
document.Results.submit();
}
Python方法:
def transferTestResults(testResults, PRINTER_FILE_DIRECTORY):
form = "<form name = 'Results' method = 'post' action = '%s'> \n" % (PRINTER_FILE_DIRECTORY)
dataString = str(json.dumps(testResults)) #converting massive dictionary into string
dataString = dataString.replace("\"", """)
form += "<input type = 'hidden' name = 'testResults' value = \"%s\">" % (dataString)
form += "<input type = 'hidden' name = 'resultsToPrint' > \n"#value is determined by javascript:getDetails()
form += "</form> \n"
return form
这里的testResults是一本大字典。相反,我宁愿为每个嵌套字典制作一个表格,例如:
def transferTestResults(testResults, DETAIL_GENERATOR_DIRECTORY):
form = "<form name = 'Results' method = 'post' action = '%s'> \n" % (DETAIL_GENERATOR_DIRECTORY)
dataString1 = str(json.dumps(testResults['testPasses']))
dataString1 = dataString.replace("\"", """)
dataString2 = str(json.dumps(testResults['testFailures']))
dataString2 = dataString.replace("\"", """)
dataString3 = str(json.dumps(testResults['commandPasses']))
dataString3 = dataString.replace("\"", """)
dataString4 = str(json.dumps(testResults['commandFailures']))
dataString4 = dataString.replace("\"", """)
form += "<input type = 'hidden' name = 'testResults1' value = \"%s\">" % (dataString1)
form += "<input type = 'hidden' name = 'testResults2' value = \"%s\">" % (dataString2)
form += "<input type = 'hidden' name = 'testResults3' value = \"%s\">" % (dataString3)
form += "<input type = 'hidden' name = 'testResults4' value = \"%s\">" % (dataString4)
form += "<input type = 'hidden' name = 'resultsToPrint' > \n"#value is determined by javascript:getDetails()
form += "</form> \n"
return form
然后我提交基于单击 link 的特定字段。例如,如果我单击 link 1,那么它只会发送带有 dataString1 的字段。问题基本上可以归结为,我能否根据用户操作仅提交表单中的某些字段而不是整个表单
当然可以,在点击事件中 - 只需 post 您的数据 ajax:
$('#input1').on('click', function(){
var value1 = $('#input1').val();
$.post("test.php", {name: value1, time: "2pm"});
})
以下只是一个简单的示例,说明您可以如何执行此操作。您可以默认禁用所有输入,然后在提交表单之前启用您想要的输入。
我刚刚使用提交方法提交了表单,您可能想使用 AJAX 或其他方法。此外,您可能希望动态附加侦听器,或使用事件委托(这是我的首选设计)。
<script>
function doSend(el) {
var form = document.forms['form0'];
var controlName = el.getAttribute('data-sendName');
form[controlName].disabled = false;
form.submit();
}
</script>
<form id="form0">
<input name="foo" value="foo" disabled>
<input name="bar" value="bar" disabled>
</form>
<p onclick="doSend(this)" data-sendName="foo">Send foo</p>
<p onclick="doSend(this)" data-sendName="bar">Send bar</p>
我在我的 python cgi 代码中使用隐藏表单将信息传递到另一个 cgi 文件(我们就称它为 printer.cgi)以打印表单中的信息。由于本教程,我还制作了可点击的文本 link,它们都指向同一个打印机文件:
http://www.thesitewizard.com/archive/textsubmit.shtml
隐藏形式包含一个巨大的嵌套字典,该字典已使用 JSON 编码为文本。然后打印机文件将该字符串转回字典对象。根据单击的 link,打印机文件决定要打印字典中的哪些信息。但是,对整个字典进行解码和编码效率很低,而且确实会减慢我的程序。相反,我想通过隐藏形式提交较小的字典对象来打印而不是整个字典。这是我目前正在做的一个例子:
JavaScript代码:
function getDetails(selectedField)
{
document.Results.resultsToPrint.value = selectedField;
document.Results.submit();
}
Python方法:
def transferTestResults(testResults, PRINTER_FILE_DIRECTORY):
form = "<form name = 'Results' method = 'post' action = '%s'> \n" % (PRINTER_FILE_DIRECTORY)
dataString = str(json.dumps(testResults)) #converting massive dictionary into string
dataString = dataString.replace("\"", """)
form += "<input type = 'hidden' name = 'testResults' value = \"%s\">" % (dataString)
form += "<input type = 'hidden' name = 'resultsToPrint' > \n"#value is determined by javascript:getDetails()
form += "</form> \n"
return form
这里的testResults是一本大字典。相反,我宁愿为每个嵌套字典制作一个表格,例如:
def transferTestResults(testResults, DETAIL_GENERATOR_DIRECTORY):
form = "<form name = 'Results' method = 'post' action = '%s'> \n" % (DETAIL_GENERATOR_DIRECTORY)
dataString1 = str(json.dumps(testResults['testPasses']))
dataString1 = dataString.replace("\"", """)
dataString2 = str(json.dumps(testResults['testFailures']))
dataString2 = dataString.replace("\"", """)
dataString3 = str(json.dumps(testResults['commandPasses']))
dataString3 = dataString.replace("\"", """)
dataString4 = str(json.dumps(testResults['commandFailures']))
dataString4 = dataString.replace("\"", """)
form += "<input type = 'hidden' name = 'testResults1' value = \"%s\">" % (dataString1)
form += "<input type = 'hidden' name = 'testResults2' value = \"%s\">" % (dataString2)
form += "<input type = 'hidden' name = 'testResults3' value = \"%s\">" % (dataString3)
form += "<input type = 'hidden' name = 'testResults4' value = \"%s\">" % (dataString4)
form += "<input type = 'hidden' name = 'resultsToPrint' > \n"#value is determined by javascript:getDetails()
form += "</form> \n"
return form
然后我提交基于单击 link 的特定字段。例如,如果我单击 link 1,那么它只会发送带有 dataString1 的字段。问题基本上可以归结为,我能否根据用户操作仅提交表单中的某些字段而不是整个表单
当然可以,在点击事件中 - 只需 post 您的数据 ajax:
$('#input1').on('click', function(){
var value1 = $('#input1').val();
$.post("test.php", {name: value1, time: "2pm"});
})
以下只是一个简单的示例,说明您可以如何执行此操作。您可以默认禁用所有输入,然后在提交表单之前启用您想要的输入。
我刚刚使用提交方法提交了表单,您可能想使用 AJAX 或其他方法。此外,您可能希望动态附加侦听器,或使用事件委托(这是我的首选设计)。
<script>
function doSend(el) {
var form = document.forms['form0'];
var controlName = el.getAttribute('data-sendName');
form[controlName].disabled = false;
form.submit();
}
</script>
<form id="form0">
<input name="foo" value="foo" disabled>
<input name="bar" value="bar" disabled>
</form>
<p onclick="doSend(this)" data-sendName="foo">Send foo</p>
<p onclick="doSend(this)" data-sendName="bar">Send bar</p>