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

次の 2 つの問題に悩まされている可能性があります。

  1. コードが制御を JS イベント ループに戻さない場合、行った DOM の変更がすぐに表示されない可能性が非常に高くなります。考えられる回避策は、カーソルを変更し、 asetTimeout(func, 0)を使用して制御をイベント ループに戻すことです。これにより、DOM 更新をレンダリングし、 your を呼び出してfunc処理を完了できます。

  2. 一部のブラウザーは、マウスが移動するまでカーソルの形状を更新しません。私はそのための回避策がないことを知っています。

于 2013-05-01T20:50:26.537 に答える