我想要做的是當index.html發送消息回服務器,我想調用app.js
函數changeButton()
將更新索引上的標題顏色。 HTML。從Node.js的JS文件中調用函數
這裏是我的node.js文件:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var express=require('express');
var tools = require('./assets/js/app.js');
app.use(express.static(__dirname + '/assets'));
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('chat message', function(msg){
console.log('message: ' + msg);
if(msg == "color") {
socket.emit("changeButton"); //working now
}
});
});
http.listen(3000, function(){
console.log('listening on localhost:3000');
});
app.js是資產/ JS文件夾。
function getMessage() {
$('form').unbind('submit').bind('submit', function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
}
function changeButton() {
$('#status').css("background-color", "red");
}
這裏是index.html的
<!DOCTYPE html>
<html>
<head>
<!-- app.js -->
<script src="js/app.js"></script>
<!-- app.css -->
<link rel="stylesheet" type="text/css" href="css/app.css"/>
</head>
<body>
<h1 id="status"> Node Test </h1>
<ul id="messages"></ul>
<form action="">
<input id="m" autocomplete="off" /><button onclick="getMessage();">Send</button>
</form>
<script>
var socket = io();
socket.on("changeButton", changeButton);
</script>
</body>
現在的工作!
謝謝!
我編輯了一些問題。 changeButton在app.js中定義。我通過@joemfb答案導入了代碼。現在沒有定義jQuery,我認爲這可能是錯誤的是要去做這件事。在服務器上加載jQuery。 – NorCalKnockOut 2015-03-31 17:35:49
好的很酷。 如果您想要更改元素的顏色,那麼JavaScript必須有權訪問HTML元素。如果HTML元素位於index.html中,那麼您需要在客戶端運行Javascript。 但是,你仍然可以使用套接字來控制這個,就像在我的答案中一樣。一旦得到消息「顏色」,只需向客戶端發回一個將執行changeButton(必須在index.html作用域中定義)的事件。那有意義嗎?我可能會誤解你想完成的事情。 – 2015-03-31 17:46:05
這是有道理的,有點。我用所有的代碼更新問題 – NorCalKnockOut 2015-03-31 17:49:23