JS - клавиша запускается несколько раз, когда находится внутри функции

0
    <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, СЕЙЧАС MY JS FUNCTION

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

ТЕПЕРЬ, ЕСЛИ ВЫ ВЫПОЛНИТЕ ЭТО, ЭТО ВЫПОЛНИТЬ НЕСКОЛЬКО ВРЕМЕНИ "$.post(" comentar_pub.php ", {coment: userComent, user: comentUserID, pub: pubID}); И ВСТАВИТЬ МНОЖЕСТВЕННЫЕ ЛИНИИ НА БД. ЕСЛИ ВЫ ПОПРОБУЕТЕ ИЗМЕНИТЬ КОД ВНУТРЕННЕГО "e.keyCode == 13" TO "alert (" 1 "); alert (" 2 ");", ВЫ МОЖЕТЕ ВИДЕТЬ ЛУЧШЕ ЭФФЕКТ. ПОЖАЛУЙСТА ПОМОГИ

  • 3
    Ваше форматирование выглядит как сценарий послевоенного взрыва города
  • 0
    Эй, вы пробовали .keypress() вместо .keydown() ?
Показать ещё 2 комментария
Теги:

1 ответ

0
Лучший ответ

Его один адский код для отслеживания... Во всяком случае, ваша проблема заключается в том, что вы onkeypress код на onkeypress в textarea + в функции keypressed() вы добавляете еще один прослушиватель событий $(textareaID).keydown() в тот же элемент... вы можете видеть, где это происходит.

Здесь следует отметить, что jquery keydown добавляет в прослушиватели событий и не заменяет существующий keydown. Таким образом, каждый раз, когда onkeypress обжигают добавить еще $(textareaID).keydown() действие события (анонимная функция, что вы передаете к событию) в $(textareaID) элемента.

На каждом нажатии клавиши вы добавляете прослушиватель событий, когда срабатывает keydown, сообщение выполняется с помощью X раз, когда onkeypress был запущен в textarea.

Удалите добавление $(textareaID).keydown() и запустите его внутри, и вы должны быть установлены... если я правильно понял, как это должно работать.

EDIT: значит, код должен быть

<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 на самом деле работает, если я правильно помню, вы все равно должны слушать смены отдельно. Но я оставлю это вам!

  • 0
    так что вы говорите, что функция js должна быть: нажатой клавишей функции (textareaID, comentUserID, pubID) {var textareaID = "#" + textareaID; if (textareaID.shiftKey && textareaID.keyCode == 13) {var txt = $ (textareaID); txt.val (txt.val ()); } else if (textareaID.keyCode == 13) {textareaID.preventDefault (); var userComent = $ (textareaID) .val (); $ .post ("comentar_pub.php", {coment: userComent, пользователь: comentUserID, pub: pubID}); $ (textareaID) .attr ("value", ""); }}
  • 0
    @ user3042700 это слепой код, потому что это невозможно проверить для меня ... ну, не волнуйтесь, сделайте тест-сенарио. Но это что-то в строках этого редактирования.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню