JS - keydown在函数内部执行多次

时间:2013-11-27 17:02:46

标签: javascript jquery html

    <div class="comentPub" id="comentPub_<?php echo $pub_id;?>">

<div id="comentPub_content">

<img onclick="close_coment_box(<?php echo $pub_id; ?>)" src="imagens/x.png" style="width: 10px; height: 10px; float: right; margin-right: 10px;"/><br/>

<a href="perfil.php">
<img src="<?php echo $imageDirectory;?>" style="width: 25px; height: 25px;"> 
</a>

<textarea name="usercoment" class="comentBox" id="comentBox_<?php echo $pub_id;?>" placeholder="Escreve um coment&aacute;rio..." onkeypress="keypressed(this.id, <?php echo $userID;?>, <?php echo $pub_id;?>)"></textarea><br/

//这是我想要获得价值并验证关键功能的文字

<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>

^ 这是我的HTML页面,现在我的JS功能

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", "");
       }
    });
}

现在,如果您执行此操作,它将执行多次&#34; $。发布(&#34; comentar_pub.php&#34;,{coment:userComent,user:comentUserID,pub:pubID}); &#34;并在DB上插入多个线路。如果您尝试更改内部代码&#34; e.keyCode == 13&#34;警告(&#34; 1&#34;);警报(&#34; 2&#34;);&#34;,你可以看到更好的效果。请帮助

1 个答案:

答案 0 :(得分:0)

它的一个代码跟踪......无论如何,你的问题是你在onkeypress + textarea +中添加了你添加的函数keypressed()中的代码另一个事件监听器$(textareaID).keydown()到同一个元素......你可以看到它的发展方向。

这里要注意的是jquery keydown在事件监听器中添加,并不替换现有的keydown。因此,每次onkeypress被触发时,您都会向$(textareaID).keydown()元素添加另一个$(textareaID)事件操作(您传递给事件的匿名函数)。

在每个按键上添加一个事件监听器,当keydown触发时,帖子的执行时间是onkeypresstextarea被触发的X次。

删除$(textareaID).keydown()事件添加并在其中运行代码,您应该设置...如果我正确理解它应该如何工作。

编辑:所以代码应该是

<textarea name="usercoment" class="comentBox" id="comentBox_<?php echo $pub_id;?>" placeholder="Escreve um coment&aacute;rio..." onkeypress="keypressed(event, this, <?php echo $userID;?>, <?php echo $pub_id;?>)"></textarea>

和JS

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", "");
    }
}

请注意! - 因为keypressed函数是通过正常事件而不是jQuery事件触发的,所以我不记得e.shiftKey是否真的有效,如果我没记错的话你还需要分别听取转换。但我会把它留给你!