Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Функции срабатывают по несколько раз (https://javascript.ru/forum/jquery/71972-funkcii-srabatyvayut-po-neskolko-raz.html)

Samsam 26.12.2017 08:55

Функции срабатывают по несколько раз
 
Подгружаю поле ввода по клике на ссылку.

$(div).load('pole.php');

если прописывать дополнительные функции в самом pole.php
допустим

if(event.keyCode == 13){ alert('Ураа'); }

то функция повторяется столько же сколько будет и полей . а функции вне файла pole.php ни срабатывают. как поступить ?

рони 26.12.2017 09:39

Samsam,
ставить обработку событий на то что присутствует всегда через $('...').on('click', 'input',)

Samsam 26.12.2017 09:46

$( "textarea" ).keyup(function(event) {.. } - Такой вариант не пойдёт ? он будет выбирать все textarea ?

Samsam 26.12.2017 09:51

а вообще нормально что коде будет дублироваться несколько раз одна и та же функция но с разными $('...'). ?

рони 26.12.2017 09:58

Samsam,
:-?

$('body').on('keyup', 'textarea',function(event) {if(event.keyCode == 13){ alert('Ураа'); }})

Samsam 02.01.2018 11:22

Этот вариант не срабатывает.

Сейчас вот так $( ".textarea" ).on('keypress', function(event) { ... });

Подгруженные блоки $( ".textarea" ) не работают. Подскажите выход

рони 02.01.2018 11:31

Samsam,
ставить обработчик на то что есть всегда (родителя и т.д. до window)
$('body').on('keypress', '.textarea', function(event) { ... }
или после создания элемента

$(div).load('pole.php',function() { $( ".textarea" ).on('keypress', function(event) { ... });}
);

Samsam 02.01.2018 11:49

Спасибо ! всё заработало. Ещё вопрос подскажите с фокусом.

$(div).html('длинный текст');
$(div).focus();

как сделать что бы фокус попадал в конец текста ?

рони 02.01.2018 12:15

contenteditable курсор в конец текста
 
Samsam,
может есть другой способ
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
var str = "длинный текст" , pos = str.length;
$("div").html(str);
var range = document.createRange();
range.setStart($("div")[0].childNodes[0], pos);
range.collapse(true);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
});
  </script>
</head>

<body>
<div id="slider" contenteditable ></div>

</body>
</html>

Samsam 03.01.2018 13:21

Спасибо. А вообще будет ли замедляться работа сайта если вызов функций такого формата ( $('body').on('...', function(){...} ) будет очень много ?


Часовой пояс GMT +3, время: 11:33.