最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Update HTML input value in node.js without changing pages - Stack Overflow

programmeradmin1浏览0评论

My aim here is to create a HTML form that when you submit 2 numbers they are added together server side in node.js and the answer is displayed in a readonly input field in the same HTML page. At present, my function outputs the answer in a separate page- I don't want to redirect the user, just show the answer on the same page while doing the calculation server side.

My current app.js:

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var app = express();

app.set('port', process.env.PORT || 8080);

app.use(bodyParser.urlencoded({extended: true}));

app.use(express.static(path.join(__dirname, '../static')));

app.get('/', function(req, res){
  res.redirect('/public');
});

app.post('/add', function(req, res){
  var a = parseFloat(req.body.numa);
  var b = parseFloat(req.body.numb);
  var sum = a+ b;
  res.send('Sum: ' + sum);
});

var server = app.listen(app.get('port'), function(){
  var port = server.address().port;

});

My aim here is to create a HTML form that when you submit 2 numbers they are added together server side in node.js and the answer is displayed in a readonly input field in the same HTML page. At present, my function outputs the answer in a separate page- I don't want to redirect the user, just show the answer on the same page while doing the calculation server side.

My current app.js:

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var app = express();

app.set('port', process.env.PORT || 8080);

app.use(bodyParser.urlencoded({extended: true}));

app.use(express.static(path.join(__dirname, '../static')));

app.get('/', function(req, res){
  res.redirect('/public');
});

app.post('/add', function(req, res){
  var a = parseFloat(req.body.numa);
  var b = parseFloat(req.body.numb);
  var sum = a+ b;
  res.send('Sum: ' + sum);
});

var server = app.listen(app.get('port'), function(){
  var port = server.address().port;

});

my HTML:

<!DOCTYPE html>
<html>
<head>
  <title>hello</title>
</head>
<body onload="testFunc()">

  <h1>Public page</h1>

<form action="/add" method="post">
  Number 1:
  <input type="number" name="numa" step="any"/><br>
  Number 2:
  <input type="number" name="numb" step="any"/><br>
  <input type="number" name="answer" readonly/>
  <input type="submit" value="Submit"/>
</form>
</body>
</html>

I've looked through other posts but the solutions all work through doing it with pug or jade, is there any way to do this without? Any suggestions on what direction I should take would be appreciated! Thank you.

Share Improve this question asked Jul 20, 2017 at 15:10 Vicci GarnerVicci Garner 452 silver badges7 bronze badges 1
  • You'd have to use ajax if you don't want to redirect, a serverside templating language won't help. – adeneo Commented Jul 20, 2017 at 15:13
Add a ment  | 

3 Answers 3

Reset to default 4

Use Jquery Ajax on client side bodyParser on server side:

Client side:

<form id="myForm" method="post">
  Number 1:
  <input type="number" id="numa" name="numa" step="any"/><br>
  Number 2:
  <input type="number" id="numb" name="numb" step="any"/><br>
  <input type="number" id="answer" name="answer" readonly/>
  <input type="submit" value="Submit"/>
</form>
<div id="result"></div>
<script>
    $(document).ready(function(){
        $("#myForm").submit(function(event){
            event.preventDefault();
            var num1 = $('#numa').val();
            var num2 = $('#numb').val();
            $.ajax({
                method: 'post',
                url: '/data',
                data: JSON.stringify({ num1: num1, num2: num2 }),
                contentType: 'application/json',
                success: function(data) {
                    $('#answer').val(data);
                }

            })
        });
    });
</script>

And Server side:

app.use(bodyParser.urlencoded({  //   body-parser to
    extended: true               //   parse data
}));                             //
app.use(bodyParser.json());      //


app.post('/data', function(req, res) {
    var a = parseFloat(req.body.num1);
    var b = parseFloat(req.body.num2);
    res.send(sum.toString());

})

Use client side JavaScript to perform an action when the submit button is clicked and have it retrieve the value rather than redirecting to the /add page. The following being the general idea:

$("submit").onClick(function(){
    $.get("/add", {numa: a, numb: b}, function(err, response, body){
        $("answer").val = body;
    });
});

please check below for your fix https://stackoverflow./a/45235894/3490058

in short you have to disable automatic (native) form submission which you can do by adding onsubmit event and removing button click event as it'll submit your form and give you error from nodejs.

<form id="add" method="post" onsubmit="return add()">
  Number 1:
  <input type="number" id="numa" name="numa" step="any"/><br>
  Number 2:
  <input type="number" id="numb" name="numb" step="any"/><br>
  <input type="number" id="answer" name="answer" readonly/>
  <input type="submit" value="Submit"/>
</form>
发布评论

评论列表(0)

  1. 暂无评论