我有一个带有脚本的 jQuery 聊天
var name = "Guest";
name = name.replace(/(<([^>]+)>)/ig,"");
var chat = new Chat();
$(function() {
chat.getState();
$("#sendie").keydown(function(event) {
var key = event.which;
if (key >= 33) {
var maxLength = $(this).attr("maxlength");
var length = this.value.length;
if (length >= maxLength) {
event.preventDefault();
}
}
});
$('#sendie').keyup(function(e) {
if (e.keyCode == 13) {
var text = $(this).val();
var maxLength = $(this).attr("maxlength");
var length = text.length;
if (length <= maxLength + 1) {
chat.send("testtext", name);
$(this).val("");
} else {
$(this).val(text.substring(0, maxLength));
}
}
});
});
html结构是;
<body onload="setInterval('chat.update()', 1000)">
<div id="page-wrap">
<h2>jQuery/PHP Chat</h2>
<p id="name-area"></p>
<div id="chat-wrap"><div id="chat-area"></div></div>
<form id="send-message-area">
<p>Your message: </p>
<textarea id="sendie" maxlength = '100' ></textarea>
<button id="submit">submit</button>
</form>
</div>
</body>
当我在消息后按
ENTER
键时,此消息会发送(或保存到文件)。我已将文本区域数据替换为 testtext
。我想在点击 submit
按钮时发送数据。
我该怎么做?
我正在尝试修改this示例。我正在尝试添加一个按钮而不是默认的
enter
按键。
只需从
$('#sendie').keyup()
获取代码,创建一个函数并从 $('#sendie').keyup()
和 $('#send-message-area').submit()
调用它
类似这样的事情
var name = "Guest";
name = name.replace(/(<([^>]+)>)/ig,"");
var chat = new Chat();
$(function() {
chat.getState();
$("#sendie").keydown(function(event) {
var key = event.which;
if (key >= 33) {
var maxLength = $(this).attr("maxlength");
var length = this.value.length;
if (length >= maxLength) {
event.preventDefault();
}
}
});
$('#sendie').keyup(function(e) {
if (e.keyCode == 13) {
doSend();
return (false);
}
});
$('#send-message-area').submit(function(e) {
doSend();
return (false);
});
});
function doSend(){
var text = $('#sendie').val();
var maxLength = $('#sendie').attr("maxlength");
var length = text.length;
if (length <= maxLength + 1) {
chat.send("testtext", name);
$('#sendie').val("");
} else {
$('#sendie').val(text.substring(0, maxLength));
}
}
您可以尝试在提交表单时触发事件:
$('#sendie').keyup(function(e, extra) {
if (e.keyCode == 13 || extra.keyCode == 13) {
var text = $(this).val();
var maxLength = $(this).attr("maxlength");
var length = text.length;
if (length <= maxLength + 1) {
chat.send("testtext", name);
$(this).val("");
} else {
$(this).val(text.substring(0, maxLength));
}
}
});
...
$("#send-message-area").submit(){
$('#sendie').trigger('keyup', [{keyCode: 13}]);
return false;
}
需要使用
return false
行来防止重新加载您的页面。
更新后向
keyup
函数添加了一个名为extra
的新参数,它将保存“手动”触发事件的keyCode。
我通过从主组中删除
chat send
并将其包含在 trigger click function
中解决了这个问题,如下所示;
$('#trigger').click(function() {
chat.send("testtext", name);
$(this).val("");
});
感谢@Kon、@Piotr Salaciak 和@Dutchie432 的支持...:)