Jquery 在ajax调用之后,新的';onclick';处理程序不';在页面上的某个地方单击之前,我不会工作

Jquery 在ajax调用之后,新的';onclick';处理程序不';在页面上的某个地方单击之前,我不会工作,jquery,javascript-events,Jquery,Javascript Events,从jQuery get()ajax调用返回后,我遇到了一个问题。响应用附加div填充div。这些新div包含“onclick”事件处理程序。浏览器需要点击页面上的任意位置,然后我才能点击新填充的div并启动它的onclick 编辑通过从“ajaxSearch”中删除“return false”和从“keypress”中删除“event.preventdefault()”来解决此问题 以下是发生的具体情况: 在“srchKey”文本框中输入值,然后按Enter键 “ajaxSearch”函数激发并

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

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

以下是发生的具体情况:

  • 在“srchKey”文本框中输入值,然后按Enter键
  • “ajaxSearch”函数激发并获取数据
  • “displayResults”功能成功更新了“searchResults”div,最多10个div垂直堆叠在左侧。每个新的“searchResult”div都有一个onclick='resultClick(这个,'/Path…',displayRecord')设置,其中'/Path…'根据数据的不同而不同
  • 我被迫在“onclick”启动之前单击页面上的某个位置(无论在哪里)。
  • 第一次单击后,我可以再次单击其中一个searchResult div,并调用“onclick”脚本
  • 对于用户来说,第一次单击“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();
            }
        });
    });
    
    我的razor页面看起来像:

    ...
    
    <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>
    }
    
    。。。
    @使用(Html.BeginForm(“Index”,“Controller”,FormMethod.Post,new{id=“searchForm”}))
    {
    标准
    @LabelFor(m=>m.Key)
    @EditorFor(m=>m.Key)
    }
    @节脚本
    {
    }
    
    您可以打开firebug并切换到“网络”选项卡,然后您将看到第一次单击是否有效。您也可以尝试手动添加a&lgt;div onclick='resultClick(this'/Path…',displayRecord')查看它是否有效


    此外,您还可以查看firebug中是否存在js错误。

    第一次单击不起作用。在“onclick”事件触发之前,我必须单击页面上的某个地方。我知道“onclick”正在成功启动,但其行为就像另一个窗口处于活动状态一样,您必须单击要激活的窗口,然后才能在其中工作。甚至单击窗口边框?啊哈!查看“网络”选项卡,我发现“第一次”点击实际上是通过“ajaxSearch”再次发布帖子**这使我了解到,“ajaxSearch”中的“return false”和“keypress”中的“event.preventdefault”导致了这种行为。**谢谢你的帮助!