【问题标题】:How to reset <div> back to pre-AJAX response state, after search field is cleared?清除搜索字段后,如何将 <div> 重置为 AJAX 之前的响应状态?
【发布时间】:2017-01-18 21:19:36
【问题描述】:

我有一个 HTML 页面,列出了数据库中的“所有”数据。我已经包含一个搜索字段,允许用户通过 Perl/AJAX 进程搜索特定的“行”。它工作得很好。用户输入信息,保存原始列表的 div 被 AJAX 请求的结果覆盖。只要他们不断更改搜索字段中的信息,AJAX 进程就会继续触发,并且一切正常。当他们试图通过清除搜索字段中的所有内容而不是简单地重新加载页面来返回原始“全部”列表时,问题就出现了。这让我想知道是否可以强制 div 恢复到它的原始状态(在它被 AJAX 响应覆盖之前)?

我将在下面包含一些代码 sn-ps,但我确信它不是特别原始的东西。

Javascript:

            function myTimer() {

            var typingTimer;
            var doneTypingInterval = 2000;

               $("#devicename").keyup(function(){
               clearTimeout(typingTimer);
               if ($('#devicename').val()) {
               typingTimer = setTimeout(updateText, doneTypingInterval);
               }



            });

                    function updateText() {

                    var devname = $('#devicename').val();
                    $.get("http://domainname/cgi-bin/ajax.pl", "devicename="+devname,
                            function(response,status,http) {
                                    $('#resultsbox').html(response);

                            }, "text");
                    }

            }

HTML

<div id="resultsbox">
<table class="devicetable">
 <tr>
    <td class="tablehead">Company Name</td>
    <td class="tablehead">ID</td>
    <td class="tablehead">Status</td>
    <td class="tablehead">Ticket</td>
    <td class="tablehead">Device/Ticket Notes</td>
    <td class="tablehead">Open SR</td>
 </tr>
<tr> lots of stuff </tr>
</div>

Perl

sub generate_results {
       #DBI stuff, result is formatted and loaded into $result
       print $html->header('text/html;charset=UTF-8');
       print $result;
 }

感谢您提供的信息。我很高兴阅读该主题,只是没有找到与此类相关的任何内容。我发现的所有内容似乎都会使 div 空白、重置表单或编写下一组结果。似乎没有什么想要回到原来的状态。在任何人怀疑之前,我不简单提供标准搜索结果场景,而是选择从整个列表中缩减的原因是因为数据库信息显示的状态可能会不时变化,并且列表是完整的被用作一种操作意识。这就是为什么我想从完整列表转到仅结果返回到完整列表。

【问题讨论】:

    标签: javascript jquery html ajax perl


    【解决方案1】:

    将 div inner html 存储在安全的地方,然后恢复它。

    使用纯 JavaScript:

    // store original html
    var originalHtml = div.innerHTML;
    
    // restore it
    div.innerHTML = originalHtml;
    

    或者像你一样使用jquery:

    // store original html
    var originalHtml = $('#resultsbox').html();
    
    // restore it
    $('#resultsbox').html(originalHtml);
    

    【讨论】:

    • 很好的建议。关于如何管理触发事件的任何建议?我假设它会从创建初始结果的相同“onkeyup”触发,并且“if”语句将指示我是否去 Perl 获取新的 $results,或者用 originalHtml 替换 div?我当然愿意接受关于什么可能是触发该触发器的好方法的建议。谢谢!
    • 看起来 updateText() 是最合适的地方 - 如果 devname 为空,则需要恢复原始 html,如果不为空 - 查询并设置。至于存储原始html,您只需要在页面加载时执行一次。顺便说一句,看起来您正在制作一个单页应用程序,请考虑为此使用适当的框架(我并不是说您一定应该这样做,因为我并不真正了解您的应用程序及其用途,但您应该阅读并思考关于它)。
    • 效果很好。谢谢,尼斯。虽然它肯定比一页大,但我仍然对你所说的“适当的框架”非常感兴趣。你介意提供更多关于你的意图的细节吗?我的网站是由 Perl TT 呈现的,我正在使用一些 Catalyst 的东西进行部署。刚开始涉足催化剂的东西。有什么我忽略的吗?
    • 很高兴它工作 :) 至于“适当的框架”,您基本上是自己实现动态视图(通过 ajax 而不是页面加载更改的 html),并且有许多框架可以做到这一点,甚至更多。仅举几例 - angularjs、reactjs、emberjs.. 这些框架处理所有常见情况并经过良好测试,并且可以轻松与 REST api 和其他标准服务器视图集成。其中一些对于初学者来说可能会让人不知所措,但如果你有兴趣,你可能想看看它们。
    • 会的。事实上,我目前正在阅读的书的下一章是关于 ember.js 的,所以效果很好。再次感谢。祝你好运。
    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多