繁体   English   中英

如何创建一个带有文本区域和两个按钮的表单,每个按钮具有不同的操作?

[英]How to create a form with a text area and two buttons, each with a different action?

我正在使用Express.js和Jade,并希望创建一个包含文本区域和两个按钮的表单,每个按钮调用一个不同的动作。 我想出了这一点,但不确定是否是执行此操作的正确方法,因为按下按钮仅会重定向,但是使一个按钮提交并不能将其与按下另一个按钮区分开:

form(method='post', action='')
  textarea(wrap="soft" placeholder="Leave a reply...").fixit-reply
  a.btn.btn-primary(href="/resolve") Resolve
  a.btn.btn-warning(href="/comment") Comment

理想情况下, app.post('/resolve', handle);将捕获一个动作app.post('/resolve', handle); 另一个带有app.post('/comment', handleC);

(根据要求,我的原始评论形成了一个答案。)

尽管可以使用JS在客户端进行处理,但是我对Express.js或Jade并不熟悉,因此我不知道如何将JS解决方案与现有代码集成。

但是,如果两个按钮都是提交按钮,则可以测试服务器端按下了哪个按钮并进行适当的重定向,从而避免了使用任何客户端JS。 无论单击哪个提交按钮的namevalue ,都将与其他表单数据一起提交。 未单击的按钮将不包含在表单数据中。 因此,您可以将两个按钮都设为name="action" ,然后在服务器端测试该参数并根据关联的value重定向。 (或者为按钮提供不同的name属性,并测试服务器端特定按钮的参数是否存在。)当然,您需要为表单赋予与服务器端操作相对应的action="something"属性,测试并重定向。

在我看来,仅服务器端的解决方案更适合于此特定要求,因为它很容易做到,它使客户端的事情保持简单,并且(显然)即使在最终用户禁用了JavaScript的浏览器中也可以使用(不是很多)用户这样做,但确实会发生)。

客户端,玉器模板,2个按钮,使用来自不同按钮的不同数据来实现“ xss”:

  form#formTestHtml1(name="htmlForm",method="post",action="/testhtml")
  button#btnSubmit1(type="submit" name="xss" value="s-html") Submit to sanitize-html
  br
  button#btnSubmit2(type="submit" name="xss" value="bleach") Submit to bleach

服务器端,检查“ xss”的值(在示例中,我使用了node.js并进行路由选择)

router.post('/testhtml', function (req, res, next) {
    var sanitizedStr = "";
    if ( req.body.xss && req.body.xss == "sanitize-html" ) {
        sanitizedStr = "sanitize-html";
    } else
    if ( req.body.xss && req.body.xss == "bleach" ) {
        sanitizedStr = "bleach";
    } else {
        sanitizedStr = "xss undefined or unknown";
    }
    res.render(sanitizedStr);
});

这是一个真实的示例,当我使用不同的html / css消毒剂测试XSS的代码片段时,我从页面上摘下来。 简化,ofc。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM