Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как отменить действие обработчика? (https://javascript.ru/forum/misc/60369-kak-otmenit-dejjstvie-obrabotchika.html)

goody-goody 24.12.2015 22:13

Как отменить действие обработчика?
 
Добрый вечер. Возник такой вопрос, можно ли по клику на кнопку отменить предыдущую обработку текста? Не полностью отменить все действия, а только предыдущее. Спасибо
<textarea></textarea>
<button id='caps'>ALL CAPS</button>
<button id='lower'>all lowercase</button>
<button id='cancel'>Cancel</button>

$(document).ready(function(){
    $('#caps').click(function() {
        $text = $('textarea').val();
        $('textarea').val($text.toUpperCase());
    });
    $('#lower').click(function() {
        $text = $('textarea').val();
        $('textarea').val($text.toLowerCase());
    });
})

рони 24.12.2015 23:17

goody-goody,
$(document).ready(function() {
       var $text;
       $('#caps').click(function() {
           $text = $('textarea').val();
           $('textarea').val($text.toUpperCase());
       });
       $('#lower').click(function() {
           $text = $('textarea').val();
           $('textarea').val($text.toLowerCase());
       });
       $('#cancel').click(function() {
           if ($text) {
               $('textarea').val($text);
               $text = ''
           }

       });
   })

ruslan_mart 25.12.2015 04:06

$('textarea') лучше вынести за функцию, чтобы не парсить каждый раз весь документ.

goody-goody 25.12.2015 09:45

рони, спасибо, я не совсем правильно выразилась, чтоб отменяло не все действия сразу, а по очереди, как в ворде. такое возможно?

рони 25.12.2015 10:01

goody-goody,
да

рони 25.12.2015 10:12

goody-goody,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<textarea></textarea>
<button id='caps'>ALL CAPS</button>
<button id='lower'>all lowercase</button>
<button id='cancel'>Cancel</button>
<script type='text/javascript' src='http://code.jquery.com/jquery-2.1.4.js'></script>
<script>
$(document).ready(function() {
       var temp = [], area = $('textarea');
       $('#caps').click(function() {
           $text = area.val();
           area.val($text.toUpperCase());
          if(temp[0] != $text) temp.unshift($text)
       });
       $('#lower').click(function() {
           $text = area.val();
           area.val($text.toLowerCase());
           if(temp[0] != $text) temp.unshift($text)
       });
       $('#cancel').click(function() {
           $text = temp.shift();
           if ($text) {
               area.val($text);
           }

       });
   })

</script>
</body>

</html>

goody-goody 26.12.2015 16:39

рони, спасибо огромное!

laimas 27.12.2015 19:27

рони,
лучше тогда push/pop, массив легче перетрахивать (А. Г. Лукашенко ©) :)

рони 27.12.2015 19:34

laimas,
ок но 0 короче чем temp.length-1 :)

laimas 27.12.2015 19:41

Это не аргумент :), удалить первый элемент массива, это удалить его, затем сдвинуть все элементы массива, а с конца так только удаление.


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