.= 'tag.htm'; break; case 'flag': $pre .= $default_pre .= 'flag.htm'; break; case 'my': $pre .= $default_pre .= 'my.htm'; break; case 'my_password': $pre .= $default_pre .= 'my_password.htm'; break; case 'my_bind': $pre .= $default_pre .= 'my_bind.htm'; break; case 'my_avatar': $pre .= $default_pre .= 'my_avatar.htm'; break; case 'home_article': $pre .= $default_pre .= 'home_article.htm'; break; case 'home_comment': $pre .= $default_pre .= 'home_comment.htm'; break; case 'user': $pre .= $default_pre .= 'user.htm'; break; case 'user_login': $pre .= $default_pre .= 'user_login.htm'; break; case 'user_create': $pre .= $default_pre .= 'user_create.htm'; break; case 'user_resetpw': $pre .= $default_pre .= 'user_resetpw.htm'; break; case 'user_resetpw_complete': $pre .= $default_pre .= 'user_resetpw_complete.htm'; break; case 'user_comment': $pre .= $default_pre .= 'user_comment.htm'; break; case 'single_page': $pre .= $default_pre .= 'single_page.htm'; break; case 'search': $pre .= $default_pre .= 'search.htm'; break; case 'operate_sticky': $pre .= $default_pre .= 'operate_sticky.htm'; break; case 'operate_close': $pre .= $default_pre .= 'operate_close.htm'; break; case 'operate_delete': $pre .= $default_pre .= 'operate_delete.htm'; break; case 'operate_move': $pre .= $default_pre .= 'operate_move.htm'; break; case '404': $pre .= $default_pre .= '404.htm'; break; case 'read_404': $pre .= $default_pre .= 'read_404.htm'; break; case 'list_404': $pre .= $default_pre .= 'list_404.htm'; break; default: $pre .= $default_pre .= theme_mode_pre(); break; } if ($config['theme']) { $conffile = APP_PATH . 'view/template/' . $config['theme'] . '/conf.json'; $json = is_file($conffile) ? xn_json_decode(file_get_contents($conffile)) : array(); } !empty($json['installed']) and $path_file = APP_PATH . 'view/template/' . $config['theme'] . '/htm/' . ($id ? $id . '_' : '') . $pre; (empty($path_file) || !is_file($path_file)) and $path_file = APP_PATH . 'view/template/' . $config['theme'] . '/htm/' . $pre; if (!empty($config['theme_child']) && is_array($config['theme_child'])) { foreach ($config['theme_child'] as $theme) { if (empty($theme) || is_array($theme)) continue; $path_file = APP_PATH . 'view/template/' . $theme . '/htm/' . ($id ? $id . '_' : '') . $pre; !is_file($path_file) and $path_file = APP_PATH . 'view/template/' . $theme . '/htm/' . $pre; } } !is_file($path_file) and $path_file = APP_PATH . ($dir ? 'plugin/' . $dir . '/view/htm/' : 'view/htm/') . $default_pre; return $path_file; } function theme_mode_pre($type = 0) { global $config; $mode = $config['setting']['website_mode']; $pre = ''; if (1 == $mode) { $pre .= 2 == $type ? 'portal_category.htm' : 'portal.htm'; } elseif (2 == $mode) { $pre .= 2 == $type ? 'flat_category.htm' : 'flat.htm'; } else { $pre .= 2 == $type ? 'index_category.htm' : 'index.htm'; } return $pre; } ?>javascript - Get the previous value on a keyup event - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Get the previous value on a keyup event - Stack Overflow

programmeradmin0浏览0评论

I have an application where I want to do something when the user taps backspace (key code 8) and the value is empty. But when I try it with keyup event, I get the value after the key has been pressed and that's not what I want. Also I don't wanna use keydown because I wanna get the current value for something else.

Basically, the GOTCHA does fire when there's no value and backspace is pressed, but it alse fires when there's a character that was just removed.

What I want is, only log GOTCHA when the previous value of the input is empty.

$(document).ready(() => {
  $('input').on('keyup', e => {
    // this is the condition for now, it need to be edited
    const condition = !$(e.target).val().length && e.keyCode === 8;
    if (condition) {
      console.log('GOTCHA'); // this fires before it should be fired
    }
    console.log($(e.target).val().length + ', ' + e.keyCode);
  });
  $('input').on('keydown', e => {
    console.log($(e.target).val().length + ', ' + e.keyCode);
  });
});
<script src=".2.1/jquery.min.js"></script>
<input type="text">
<span></span>

I have an application where I want to do something when the user taps backspace (key code 8) and the value is empty. But when I try it with keyup event, I get the value after the key has been pressed and that's not what I want. Also I don't wanna use keydown because I wanna get the current value for something else.

Basically, the GOTCHA does fire when there's no value and backspace is pressed, but it alse fires when there's a character that was just removed.

What I want is, only log GOTCHA when the previous value of the input is empty.

$(document).ready(() => {
  $('input').on('keyup', e => {
    // this is the condition for now, it need to be edited
    const condition = !$(e.target).val().length && e.keyCode === 8;
    if (condition) {
      console.log('GOTCHA'); // this fires before it should be fired
    }
    console.log($(e.target).val().length + ', ' + e.keyCode);
  });
  $('input').on('keydown', e => {
    console.log($(e.target).val().length + ', ' + e.keyCode);
  });
});
<script src="https://ajax.googleapis./ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="text">
<span></span>

This is a fiddle to give you an idea of what I want to achieve https://jsfiddle/0z4cyj2e/1/

Thanks for looking into this :)

Share Improve this question edited Feb 8, 2018 at 11:13 Rory McCrossan 338k41 gold badges320 silver badges351 bronze badges asked Feb 8, 2018 at 11:06 aspiring_devaspiring_dev 932 gold badges5 silver badges12 bronze badges 7
  • 1 just calculate the condition in the keydown? like this – user757095 Commented Feb 8, 2018 at 11:10
  • it alse fires when there's a character that was just removed. I cannot replicate that behaviour. The code in your fiddle works as you require - it only shows GOTCHA when you attempt to delete with an empty field. Here's your same logic tidied up so it's clearer: jsfiddle/0z4cyj2e/2 – Rory McCrossan Commented Feb 8, 2018 at 11:10
  • 2 Also note that you should post all relevant code in the question. People shouldn't have to leave SO to understand what you're asking. I've edited the question for you to include the snippet. – Rory McCrossan Commented Feb 8, 2018 at 11:12
  • @CrisimIlNumenoreano I know it works the way I want it with keydown, but I need the current value in another part of that callback, so I can't use it. Thanks – aspiring_dev Commented Feb 8, 2018 at 11:14
  • @RoryMcCrossan I actually just tested it and it doesn't work the way I want it. when you press backspace and there's one character in the input, it fire GOTCHA – aspiring_dev Commented Feb 8, 2018 at 11:16
 |  Show 2 more ments

1 Answer 1

Reset to default 6

You might save the previous value in data props of the input on keydown.

$(document).ready(() => {
  $('input').on('keyup', e => {
    // this is the condition for now, it need to be edited
    const condition = !$(e.target).data('previousValue').length && e.keyCode === 8;
    if (condition) {
      console.log('GOTCHA'); // this fires before it should be fired
    }
    console.log($(e.target).val().length + ', ' + e.keyCode);
  });
  $('input').on('keydown', e => {
    console.log($(e.target).val().length + ', ' + e.keyCode);
    $(e.target).data('previousValue', $(e.target).val());
  });
});
<script src="https://ajax.googleapis./ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<input type="text">
<span></span>

发布评论

评论列表(0)

  1. 暂无评论