Javascript JS-keydown在函数中执行多次
现在,如果执行该命令,它将多次执行“$.post”(“comentar_pub.php“,{coment:userComent,user:comentUserID,pub:pubID})”,并在数据库上插入多行。如果您尝试将“e.keyCode==13”中的代码更改为“alert(“1”);alert(“2”);”,则可以更好地看到效果。请提供帮助这是一个很难追踪的代码。。。无论如何,您的问题可能是您在函数Javascript JS-keydown在函数中执行多次,javascript,jquery,html,Javascript,Jquery,Html,现在,如果执行该命令,它将多次执行“$.post”(“comentar_pub.php“,{coment:userComent,user:comentUserID,pub:pubID})”,并在数据库上插入多行。如果您尝试将“e.keyCode==13”中的代码更改为“alert(“1”);alert(“2”);”,则可以更好地看到效果。请提供帮助这是一个很难追踪的代码。。。无论如何,您的问题可能是您在函数keypressed()的textarea+中的onkeypress上触发了代码。您将另一
keypressed()
的textarea
+中的onkeypress
上触发了代码。您将另一个事件侦听器$(textareaID).keydown()
添加到同一元素中。。。你可以看到这是怎么回事
这里需要注意的是jquerykeydown
添加了事件监听器,而不是替换现有的keydown。因此,每次启动onkeypress
时,都会向$(textareaID)
元素添加另一个$(textareaID).keydown()
事件操作(传递给事件的匿名函数)
在您添加的每个按键上,当按下键触发时,post将在textarea
上执行onkeypress
删除添加事件的$(textareaID).keydown()
并在其中运行代码,您应该设置为。。。如果我正确理解了这应该如何工作
编辑:所以代码应该是
function keypressed(textareaID, comentUserID, pubID){
var textareaID = "#" + textareaID;
$(textareaID).keydown(function(e){
if(e.shiftKey && e.keyCode == 13){
var txt = $(textareaID);
txt.val(txt.val());
} else if (e.keyCode == 13) {
e.preventDefault();
var userComent = $(textareaID).val();
$.post("comentar_pub.php", {coment: userComent, user: comentUserID, pub: pubID});
$(textareaID).attr("value", "");
}
});
}
注意因为
keypressed
函数是通过正常事件而不是jQuery事件触发的,所以我不记得e.shiftKey
是否实际工作,如果我没记错的话,您仍然需要单独监听shift。但我会让你决定的 您的格式设置看起来像战后轰炸的城市场景。您尝试了.keypress()
而不是.keydown()
?看看Jquery
,以及它如何帮助低调的javascript
谢谢大家。Illimar Pihlamäe的答案解决了我的问题。所以你是说js函数应该是:function keypressed(textareaID,comentUserID,pubID){var textareaID=“#”+textareaID;if(textareaID.shiftKey&&textareaID.keyCode==13){var txt=$(textareaID);txt.val(txt.val())}如果(textareaID.keyCode==13){textareaID.preventDefault();var userComent=$(textareaID.val();$.post(“comentar_pub.php”,{coment:usercomentt,user:comentUserID,pub:pubID});$(textareaID.attr(“value”,“”);}@user3042700这是一个盲代码,因为我无法检查它…我们不想做一个测试senario。但这是编辑的第几行内容。@user3042700在另一个注释中,我在您的SQL中看到,您将代码留给数据注入(或者可能只是像我看到的代码片段中的那样)@user3042700您知道最好在文本区域中添加一个jquery事件监听器,类似于$('#comentBox'.keypress(函数(e){keypressed(e,this.id,);})
然后您可以或多或少地使用您的原始代码。当然,您需要从文本区域中删除onkeypress
事件。@user3042700这是为了工作,还是我应该试着为您制作一个全功能的测试用例?PS如果我之前对您有点粗鲁,我很抱歉,我刚刚得到消息说我有一个2w工作的1w截止日期我想我是拿你出气的。
<li style="background: #ddd; font-size: 0; height: 1px; line-height: 0; width: 350px; float: left;"></li>
<?php
$comentarios = "SELECT * FROM comentPub WHERE pubID = '$pub_id'";
$comentarios_query = mysql_query($comentarios, $liga);
while ($row4 = mysql_fetch_array($comentarios_query)){
$userComentID = $row4['userID'];
$coment = $row4['coment'];
$comentID = $row4['comentID'];
$getUserComentData = "SELECT * FROM perfis WHERE id='$userComentID'";
$getUserComentData_query = mysql_query($getUserComentData, $liga);
while ($row5 = mysql_fetch_array($getUserComentData_query)){
$userComentImage = $row5['imagem'];
$nome = $row5['nome'].' '.$row5['apelidos'];
}
}
?>
</div>
</div>
function keypressed(textareaID, comentUserID, pubID){
var textareaID = "#" + textareaID;
$(textareaID).keydown(function(e){
if(e.shiftKey && e.keyCode == 13){
var txt = $(textareaID);
txt.val(txt.val());
} else if (e.keyCode == 13) {
e.preventDefault();
var userComent = $(textareaID).val();
$.post("comentar_pub.php", {coment: userComent, user: comentUserID, pub: pubID});
$(textareaID).attr("value", "");
}
});
}
<textarea name="usercoment" class="comentBox" id="comentBox_<?php echo $pub_id;?>" placeholder="Escreve um comentário..." onkeypress="keypressed(event, this, <?php echo $userID;?>, <?php echo $pub_id;?>)"></textarea>
function keypressed(e, textareaDOM, comentUserID, pubID){
if (!e) var e = window.event;
var txt = $(textareaDOM);
if(e.shiftKey && e.keyCode == 13){
txt.val(txt.val());
} else if (e.keyCode == 13) {
e.preventDefault();
var userComent = txt.val();
$.post("comentar_pub.php", {coment: userComent, user: comentUserID, pub: pubID});
txt.attr("value", "");
}
}