jQuery单击不在ajax html响应中工作(Django)

jQuery单击不在ajax html响应中工作(Django),jquery,django,click,Jquery,Django,Click,我有以下代码: <input class="span7" type="text" id="search" name="search"> <div class="well" id="search-results" style="position: absolute; top: 208px; left: 62px; height: 100px; width: 340px; overf

我有以下代码:

<input class="span7" type="text" id="search" name="search">
<div class="well" id="search-results" style="position: absolute;
          top: 208px;
          left: 62px;
          height: 100px;
          width: 340px;
          overflow:
          auto;">
    <ul id="list-results" style="margin: 0; padding:0; top: 0;">
    {% include 'search-results.html' %}
    </ul>
</div>
当我选择其中一项时,它不会:

$('#list-results ul')
$('#list-results > ul')
$('#result-selected')
and more...
这是一个问题,这个html是由ajax呈现的,但在加载页面时它不是在乞讨吗?我能做什么?我想用显示的a的值来做一些事情

Ajax调用:

$('#search').keyup(function(){

      $.ajax({
          type: "POST",
          url:"/meal/search/",
          data:{
              'search_text': $('#search').val(),
              'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
          },
          success: searchSuccess,
          dataType: 'html'

      }

      );
  });

  function searchSuccess(data, textStatus, jqXHR){

      if ($('#search').val().length < 3){
        $('#search-results').hide();
      } else {
        $('#search-results').show();
      }

      $('#list-results').html(data);

  }
$(“#搜索”).keyup(函数(){
$.ajax({
类型:“POST”,
url:“/MEIN/search/”,
数据:{
“搜索文本”:$(“#搜索”).val(),
'csrfmiddlewaretoken':$('input[name=csrfmiddlewaretoken]')。val()
},
成功:搜索成功,
数据类型:“html”
}
);
});
函数searchSuccess(数据、文本状态、jqXHR){
if($('#search').val().length<3){
$(“#搜索结果”).hide();
}否则{
$(“#搜索结果”).show();
}
$(“#列出结果”).html(数据);
}

使用动态单击功能时使用

on('click', function ..) or live('click', function())
将您的功能更改为live click

$('#list-results ul').live('click', function(e){
  console.log($(this));
});
尝试使用“活动”处理程序


每当您单击list results div中的li元素时,就会触发上述函数。

从jQuery 1.7开始,.live()方法已被弃用。使用.on()附加事件处理程序。较旧版本的jQuery用户应优先使用.delegate(),而不是.live()


我在这里找到了一个解决方案:

您必须首先选择父元素,然后选择尚未存在的元素

$('#list-results').on( 'click', '#result-selected', function(){
    console.log($(this));
    console.log($(this).html());
  });

你不能得到不存在的东西。如果元素尚未插入,但稍后将使用ajax添加,则在它们实际存在之前,无法获取值或文本。即使通过ajax发送的长列表在html中,这也不起作用。我可以选择firebug。我在输入文本中执行一个查询,它匹配了一些内容,因此显示了一个列表,然后我单击其中一个项目。
ajax
调用在哪里?如果我们能看到它会更好。或者多次使用相同的ID,或者尝试将元素的值发送到服务器端,然后在相同的ajax调用中获取要发送的值的元素。我无法理解这个逻辑?我得到了#search的值并将其发送到服务器端。它使用html和与文本匹配的项目进行响应。然后,用户选择此项中的一项并以其他形式使用它(这尚未实现)。如果我足够清楚的话,很抱歉。请告诉我这是否是您想要的。TypeError:$(…)。live不是一个函数,不是折旧的吗?哦,是的,我已经更改了我的函数,现在它使用了“on”。旧习难改。谢谢你的指点。它们都不起作用。live有一个TypeError:$(…)。live不是函数
$('#list-results ul').live('click', function(e){
  console.log($(this));
});
$('#list-results ul li').on('click', function(e){
  console.log($(this));
});
$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+
$('#list-results').on( 'click', '#result-selected', function(){
    console.log($(this));
    console.log($(this).html());
  });