如果输入大于0并且是字母键,如何只执行jquery代码?

时间:2009-12-26 13:01:21

标签: javascript jquery

所以我一直在阅读教程:http://jqueryfordesigners.com/play-school-easy-ajax-load/(网站在BTW时似乎有点慢)

我尝试使用:

if(this.value.length > 0) {

但它似乎不起作用。 当我在输入论坛输入内容时,即使我按下说移位,它也会每次加载test1.php。 (这不是我想要的,我希望它只在我输入一个实际的字母或数字时才刷新)

我正在使用的主要JavaScript:

$(document).ready(function () {
    $('#name').keyup(function () {
      // if(this.value.length > 0) {
        $('#results ul').load(
            'test1.php #results li'
          , { name : this.value }
        );
      // }
    });
});

任何指针?

2 个答案:

答案 0 :(得分:2)

$(document).ready(function () {
  $('#name').keyup(function () {
    // console.log(this.value);
    if(this.value.length > 0) {  
      $('#results ul').load('test1.php #results li', { name : this.value });
    }
   });
});

应该有效。尝试在此处添加一些alert("test");并查看它们何时弹出。或者使用firebug逐步执行代码。


修改

如果按下实际的字符键,您似乎只希望它加载页面。有几种方法可以做到这一点,但最简单的方法可能是将盒子的值与之前的值进行比较,即按下键之前的值:

$(document).ready(function () {
  $('#name').keyup(function () {
    if(this.value != $(this).attr("data-old-value") && this.value.length > 0) {  
      $(this).attr("data-old-value", this.value);
      $('#results ul').load('test1.php #results li', { name : this.value });
    }
   });
});

这只有在你使用keyup(在firefox中测试)时才有效。

答案 1 :(得分:1)

您是否尝试过使用keypress代替keydown?只按下修改键时,按键不会触发。

$(document).ready( function() {
     $('#name').keypress( function() {
         $('#results ul').load('test1.php #results li', { name : $(this).val() } );
     });
});

另请注意,我将其更改为使用jQuery来获取元素的值。如果您想要更多地控制哪些键触发AJAX调用,请使用事件参数并检查keyCode值。

 $('#name').keypress( function(e) {
      if ((e.keyCode >=48 && e.keyCode < 58) // numbers
          || (e.keyCode >= 65 && e.keyCode < 91) // uppercase
          || (e.keyCode >= 97 && e.keyCode < 123)) { // lowercase
          ...
      }
 });