在ajax调用之后,新的'onclick'处理程序在页面上的某个位置单击之前不起作用

时间:2013-01-07 23:30:22

标签: jquery javascript-events

从jQuery get()ajax调用返回后我遇到了问题。响应使用额外的div填充div。这些新div包含'onclick'事件处理程序。浏览器需要点击页面上的任意位置才能点击新填充的div,然后点击“onclick”进行点击。

编辑通过从'ajaxSearch'中删除'return false'和从'keypress'中删除'event.preventdefault()来解决此问题

以下是具体情况:

  1. 在'srchKey'文本框中输入一个值,按Enter键
  2. 'ajaxSearch'函数触发并获取数据。
  3. 'displayResults'功能成功更新'searchResults'div,最多10个div在左侧垂直堆叠。每个新的'searchResult'div都有一个onclick ='resultClick(this,'/ Path ...',displayRecord)',其中'/ Path ...'根据数据而变化。
  4. 在'onclick'触发之前,我被迫点击页面上的某个位置(无所谓)。
  5. 第一次点击后,我可以再次点击其中一个searchResult div,并调用'onclick'脚本。
  6. 对于用户来说,当您第一次点击其中一个'searchResult'div时,似乎没有任何反应。点击一次后,随后每次点击其中一个'searchResult'div都会按预期工作。

    该问题似乎与浏览器无关(至少在Chrome和Firefox中它的功能相同)。

    我在我的页面中使用了以下jquery脚本:

    function displayResults(data) {
        $('.searchResults').html(data);
        return false;
    }
    
    function resultClick(selected, req, callback) {
        $('.searchResult').removeClass('selected');
        $(selected).addClass('selected');
        $.get(req, callback);
        return false;
    }
    
    function displayRecord(data) {
        $('#selectedRecord').html(data);
        return false;
    }
    
    function ajaxSearch() {
        $('#selectedRecord').empty();
        var myForm = $('#searchForm');
        $.post(myForm.URL, myForm.serialize(), displayResults);
        return false;
    }
    
    $(function () {
        $('#loadingDiv').hide();
    
        $('.watched').blur(ajaxSearch);
        $('#srchDate').blur(ajaxSearch);
    
        $(document).keypress(function (event) {
            if (event.which === 13) {
                event.preventDefault();
                ajaxSearch();
            }
        });
    });
    

    我的剃刀页面如下:

    ...
    
    <div id="searchPage">
        @using (Html.BeginForm("Index","Controller",FormMethod.Post, new {id="searchForm"}))
        {
            <fieldset>
                <legend>Criteria</legend>
                <div class="search" id="srchKey">
                     @Html.LabelFor(m=>m.Key)
                     @Html.EditorFor(m=>m.Key)
                </div>
            </fieldset>
        }
        <div class="resultsBlock">
            <div class="searchResults" id="unitResults"></div>
            <div id="selectedRecord"></div>
        </div>
    </div>
    
    @section scripts
    {
        <script src="@Url.Content("~/Scripts/search.js")" type="text/javascript"></script>
    }
    

1 个答案:

答案 0 :(得分:1)

您可以打开firebug并切换到网络标签,然后您将看到第一次点击是否有效。您也可以尝试手动添加&amp; lgt; div onclick ='resultClick(this,'/ Path ...',displayRecord)'以查看它是否有效。

另外,你可以看看firebug中是否有任何js错误。