Javascript node.js中的单击事件不起作用
我使用Node.js+Express+Jade+Socket.io在一个浏览器中设置单击事件,以触发在另一个浏览器中单击按钮。我很难让它工作。到目前为止,我掌握的代码是: 客户端(index.jade):Javascript node.js中的单击事件不起作用,javascript,jquery,node.js,socket.io,Javascript,Jquery,Node.js,Socket.io,我使用Node.js+Express+Jade+Socket.io在一个浏览器中设置单击事件,以触发在另一个浏览器中单击按钮。我很难让它工作。到目前为止,我掌握的代码是: 客户端(index.jade): var socket=io.connect('http://localhost:8080'); $('#buttonLeft')。点击(函数(){ socket.emit('keyLeft'); }); }); 服务器端: var sockets={}; io.sockets.on('con
var socket=io.connect('http://localhost:8080');
$('#buttonLeft')。点击(函数(){
socket.emit('keyLeft');
});
});
服务器端:
var sockets={};
io.sockets.on('connection',函数(socket){
socket.on('keyLeft',function(){
socket.broadcast.emit('keyLeft');
});
});
另一个客户端(index.php):
//初始变量
var imagesTotal=;
var-currentImage=1;
var thumbsTotalWidth=0;
$('a.galleryBullet'+currentImage).addClass(“活动”);
$('a.thumbnailsimage'+currentImage).addClass(“活动”);
$('div.description'+currentImage).addClass(“可见”);
//上一个箭头代码
$('a.previousSlideArrow')。单击(函数(){
$('img.previewImage'+currentImage).hide();
$('a.galleryBullet'+currentImage).removeClass(“活动”);
$('a.thumbnailsimage'+currentImage).removeClass(“活动”);
$('div.description'+currentImage).removeClass(“可见”);
当前图像--;
如果(currentImage==0){
currentImage=imagesTotal;
}
$('a.galleryBullet'+currentImage).addClass(“活动”);
$('a.thumbnailsimage'+currentImage).addClass(“活动”);
$('img.previewImage'+currentImage).show();
$('div.description'+currentImage).addClass(“可见”);
返回false;
});
// ===================
//下一个箭头代码
$('a.nextSlideArrow')。单击(函数(){
$('img.previewImage'+currentImage).hide();
$('a.galleryBullet'+currentImage).removeClass(“活动”);
$('a.thumbnailsimage'+currentImage).removeClass(“活动”);
$('div.description'+currentImage).removeClass(“可见”);
currentImage++;
如果(currentImage==imagesTotal+1){
currentImage=1;
}
$('a.galleryBullet'+currentImage).addClass(“活动”);
$('a.thumbnailsimage'+currentImage).addClass(“活动”);
$('img.previewImage'+currentImage).show();
$('div.description'+currentImage).addClass(“可见”);
返回false;
});
// ===================
我尝试用以下代码复制您的设置:
服务器:
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.get('/', function (req, res) {
res.render('index');
});
io.on('connection', function (socket) {
socket.on('left', function () {
socket.broadcast.emit('leftButtonClicked');
});
socket.on('right', function () {
socket.broadcast.emit('rightButtonClicked');
});
});
http.listen(3000, function(){
console.log('listening on port 3000');
});
jade客户:
doctype html
html
body
h1 Testing socket.io
h3(id="status") not connected
buttons
button#leftButton Prev
button#rightButton Next
br
h3 actions:
p#actions
script(src="/socket.io/socket.io.js")
script.
var socket = io();
socket.on('connect', function() {
document.getElementById("status").innerHTML = "connected";
});
document.getElementById("leftButton").addEventListener('click', function () {
socket.emit('left');
document.getElementById("actions").innerHTML += "Prev button click sent<br>";
});
document.getElementById("rightButton").addEventListener('click', function () {
socket.emit('right');
document.getElementById("actions").innerHTML += "Next button click sent<br>";
});
doctype html
html
身体
h1测试插座.io
h3(id=“status”)未连接
按钮
按钮#左按钮前
按钮#右按钮下一步
溴
h3行动:
p#行动
脚本(src=“/socket.io/socket.io.js”)
剧本
var socket=io();
socket.on('connect',function(){
document.getElementById(“状态”).innerHTML=“已连接”;
});
document.getElementById(“leftButton”).addEventListener('click',函数(){
socket.emit('left');
document.getElementById(“操作”).innerHTML+=“上一个按钮单击发送
”;
});
document.getElementById(“rightButton”).addEventListener('click',函数(){
socket.emit('right');
document.getElementById(“操作”).innerHTML+=“下一步”按钮单击发送
”;
});
html图库:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.1/socket.io.js"></script>
</head>
<body>
<div>
<div id="preview" style="padding: 5px;"></div>
<div id="fullSize" class="fullgalleryPreviewImage" style="padding: 5px;"></div>
<div style="padding: 5px;">
<button id="previousSlideArrow" style="height: 4em; width=100px;"><</button>
<button id="nextSlideArrow" style="height: 4em; width=100px;">></button>
</div>
</div>
<script type="text/javascript">
// init variables
var imagesTotal = 8;
var currentImage = 1;
for (var i = 1; i <= imagesTotal; i++) {
document.getElementById('preview').innerHTML += '<img class="previewImage' + i + '"src="images/image' + i + '.jpg" + width="200" height="auto" style="margin-left: 2px;" />';
}
document.getElementById('fullSize').innerHTML = '<img src="images/image' + currentImage + '.jpg" + width="800" height="auto" />';
// PREVIOUS ARROW CODE
document.getElementById('previousSlideArrow').addEventListener('click', function () {
currentImage--;
if (currentImage === 0) {
currentImage = imagesTotal;
}
document.getElementById('fullSize').innerHTML = '<img src="images/image' + currentImage + '.jpg" + width="800" height="auto" />';
});
// NEXT ARROW CODE
document.getElementById('nextSlideArrow').addEventListener('click', function () {
currentImage++;
if (currentImage === imagesTotal + 1) {
currentImage = 1;
}
document.getElementById('fullSize').innerHTML = '<img src="images/image' + currentImage + '.jpg" + width="800" height="auto" />';
});
// socket.io
var socket = io("http://localhost:3000");
socket.on('connect', function () {
console.log('connected');
});
socket.on('leftButtonClicked', function () {
document.getElementById('previousSlideArrow').click();
});
socket.on('rightButtonClicked', function () {
document.getElementById('nextSlideArrow').click();
});
</script>
</body>
</html>
//初始变量
var-imagesTotal=8;
var-currentImage=1;
对于(var i=1;i),您在客户端有两个io.connect
,对吗?什么是“很难让它工作”什么意思?告诉我们细节please@MarcosCasagrande是的,你说得对。我在两个客户端中都有io.connect。@mk12ok我试图实现另一个事件,如滚动事件,它工作得很好,但当我尝试click事件(上面的那些)的代码时,它没有按我希望的那样工作(在另一个客户端文件中触发click)。我不确定我的代码是否不正确,或者我的代码中是否遗漏了某些内容。你应该只有一个io.connect,这就是为什么你在客户端的socket.on('keyLeft'
)上没有得到任何东西。感谢你的代码。我尝试添加document.getElementById(“操作”)。innerHTML+=“按钮单击发送”要查看连接,现在两个客户端都连接到socket.io mojoer.kr:8080/socket.io/socket.io.js“>(之前没有)。jade客户端工作正常,可以发送点击请求,但html客户端没有收到请求。您能给我看一下html客户端的全部代码吗?嗨,非常感谢您的帮助。我现在理解了这个概念。它在本地工作,但我有一个问题,如果服务器设置了jade客户端(应用程序)要侦听socket.io端口以外的其他端口,例如app.listen(8000)和socket.io listen(8080),如何将位于不同web服务器上的html客户端连接到socket.io?我尝试了使用和var socket=io(服务器侦听某些端口:http.listen()
两个客户端必须连接到完全相同的端口:jade客户端连接到脚本(src=“/socket.io/socket.io.js”)
,然后连接到var socket=io();
和html客户端连接到
(在头部!),然后连接到var socket=io(“http://mojoer.kr:”;