0

我希望在调用函数以通过 XML 搜索以匹配单词时更改光标,以便用户知道正在发生某些事情。

这是功能:

    function searchResults(query) {
      $("body").css("cursor", "wait");
      var temp = "\\b" + query + "\\b";
      var regex_query = new RegExp(temp, "gi");
      var currentLine;
      var num_matching_lines = 0;
      var searchCount = 0;
      var matchesLine;
      $("#mainOutput, #searhResults").empty();
      $("LINE", currentContext).each(function () {
        var line = this;
        currentLine = $(this).text();
        matchesLine = currentLine.replace(regex_query, '<span class="query_match">' + query + '</span>');
        if (currentLine.search(regex_query) > 0) {
          searchCount = searchCount + currentLine.match(regex_query).length;
          $('#sideInfo>ul').empty();
          num_matching_lines++
          $("#mainOutput").append("<br /><p class='speaker_match indent'>"+  $(line).parent().find('SPEAKER').text() +"</p>");
          $("#mainOutput").append("<p class='act_match indent'>"+  $(line).parent().parent().parent().children(':first-child').text()+"</p>");
          $("#mainOutput").append("<p class='scene_match indent'>"+  $(line).parent().parent().children(':first-child').text() +"</p>");
          $("#mainOutput").append("<p class='pad'>" + matchesLine + "</p>");
          $("#mainOutput").append("<br><hr />");
        }   
      });
      $("#searhResults").append("<p>Found " + query + " in " + num_matching_lines + " lines</p>");
      $("#searhResults").append("<p>Found " + query + " " + searchCount + " times</p>");
      $("body").css("cursor", "default");
    }

它由以下任一操作调用:

  $("#term_search").keypress(function (event) {
    if (event.keyCode == 13) searchResults($("#term_search").val()); 
  });

  $('#term-search-btn').click(function () {
    searchResults($("#term_search").val());
  });

问题是搜索完成后光标变为等待符号,然后没有变回默认值,我该如何解决这个问题?

4

1 回答 1

0

您可能会遇到两个问题:

  1. 如果您的代码没有将控制权交还给 JS 事件循环,那么您所做的任何 DOM 更改很可能不会立即可见。一种可能的解决方法是更改​​光标,然后使用 asetTimeout(func, 0)将控制权传递回事件循环,然后它可以呈现 DOM 更新,然后调用您func来完成处理。

  2. 某些浏览器在鼠标移动之前不会更新光标形状。我知道没有解决办法。

于 2013-05-01T20:50:26.537 回答