使用JavaScript从列表中标记单词

时间:2013-09-20 17:36:07

标签: javascript jquery html css

我正在尝试使用javascript来标记集合列表中的单词,但它似乎不起作用。基本上我希望用户能够键入一个单词,如果它匹配右侧列表中的任何一个,它会将该单词标记为红色。

对我做错了什么的想法?

http://jsfiddle.net/Copernicus76/rpuXW/embedded/result/

// Load the banned plates json data

  var platesJson = (function () {
      platesJson = null;
      $.ajax({
          'async': false,
              'global': false,
              'url': "bannedplates.json",
              'dataType': "json",
              'success': function (bannedplates) {
              platesJson = bannedplates;
          }
      });
      return platesJson;
  })();


  $(document).ready(function () {

      // Draw the list //

      $.each(platesJson, function (i) {
          $('#plate-list').append('<div class="row-' + i + '">' + platesJson[i].plate + '</div>');
      });


      // Search the banned plates //

      $('#plate-text').keyup(function () {

          var result = '';
          var plateRow = '';
          var scrollPosition;
          var searchText = $('#plate-text').val().toUpperCase();

          $.each(platesJson, function (i) {
              if (searchText == platesJson[i].plate) {
                  result = 'banned';
                  plateRow = i;
                  scrollPosition = i * 19;
              }

          });

          if (/\S/.test(searchText)) {

              if (result == 'banned') {
                  $('#plate-intro,#plate-ok').hide();
                  $('#plate-banned').show().fadeOut(1500);
                  $('#plate-text').addClass('banned');
                  $('#plate-list').animate({
                      scrollTop: scrollPosition
                  }, 1000);
                  $('#plate-list div.row-' + plateRow + '').addClass('banned');
              } else {
                  $('#plate-intro,#plate-banned').hide();
                  $('#plate-ok').show().fadeOut(1500);
                  $('#plate-text').removeClass('banned');
              }

          } else {
              $('#plate-text').val('');
              $('#plate-ok,#plate-banned').hide();
              $('#plate-intro').show();
          }

      });

  }); // end document ready

1 个答案:

答案 0 :(得分:0)

  var platesJson = (function () {
      platesJson = null;
      $.ajax({
          'async': false,
          'global': false,
          'url': "bannedplates.json",
          'dataType': "json",
          'success': function (bannedplates) {
              platesJson = bannedplates;
          }
      });
      return platesJson;
  })();

这不是ajax的工作方式。第一个a表示asynchronous,因此只要响应返回,成功函数就会运行。这不会立即发生,可能需要几分钟,否则可能完全失败。 success方法是回调。那就是你想做魔术的地方。

  $.ajax({
      'async': false,
      'global': false,
      'url': "bannedplates.json",
      'dataType': "json",
      'success': function (bannedplates) {
          $.each(bannedplates, function (i) {
              $('#plate-list').append('<div class="row-' + i + '">' + bannedplates[i].plate + '</div>');
          });
          $('#plate-text').keyup(function () {
              // ...the rest of your code
          });
      }
  });