当前位置: 代码迷 >> JavaScript >> 选择要在表单中提交的字段
  详细解决方案

选择要在表单中提交的字段

热度:55   发布时间:2023-06-12 13:50:25.0

我在python cgi代码中使用隐藏的表单将信息传递到另一个cgi文件(我们仅将其称为printer.cgi)以在表单中打印信息。 由于本教程的帮助,我还创建了可点击的文本链接,这些链接均指向同一打印机文件:

隐藏的表单包含一个庞大的嵌套字典,该字典已使用JSON编码为文本。 然后,打印机文件将该字符串转换回字典对象。 根据单击的链接,打印机文件决定要在词典中打印哪些信息。 但是,对整个字典进行解码和编码效率很低,并且确实减慢了我的程序的速度。 相反,我想通过隐藏形式提交较小的字典对象来打印,而不是整个字典。 这是我目前正在做的一个例子:

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("\"", "&quot;")
        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("\"", "&quot;")
    dataString2 = str(json.dumps(testResults['testFailures']))
    dataString2 = dataString.replace("\"", "&quot;")
    dataString3 = str(json.dumps(testResults['commandPasses']))
    dataString3 = dataString.replace("\"", "&quot;")
    dataString4 = str(json.dumps(testResults['commandFailures']))
    dataString4 = dataString.replace("\"", "&quot;")
    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

然后,我根据单击的链接提交特定字段。 例如,如果我单击链接1,则它将仅发送带有dataString1的字段。 基本上,问题可以归结为这一点, 我可以仅以表单的形式提交某些字段,而不是根据用户操作提交整个表单吗?

以下只是一个简单的示例,说明了如何进行此操作。 您可以默认禁用所有输入,然后仅在提交表单之前启用所需的输入。

我刚刚使用表单的Submit方法提交了表单,您可能想使用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>

当然可以,在click事件上-只需使用ajax发布数据即可:

$('#input1').on('click', function(){
    var value1 = $('#input1').val();
    $.post("test.php", {name: value1, time: "2pm"});
})
  相关解决方案