Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 无法从动态项中选择/获取文本_Jquery_Dom_Knockout.js - Fatal编程技术网

Jquery 无法从动态项中选择/获取文本

Jquery 无法从动态项中选择/获取文本,jquery,dom,knockout.js,Jquery,Dom,Knockout.js,我使用的是Knockout.js,当用户开始在搜索框中输入实时过滤时,会出现一个下拉列表。目前,用户可以在列表中按箭头键,然后按enter键填充搜索框 我的电脑里有一个直播版本 但是,我希望用户能够滚动列表并单击项目。我不太清楚这些列表项在DOM中的位置,因为Knockout.js会动态添加它们 下面是有问题的代码的特定部分: <div class="hidden" id='dropdown'> <ul id='dropdownList' data-bi

我使用的是Knockout.js,当用户开始在搜索框中输入实时过滤时,会出现一个下拉列表。目前,用户可以在列表中按箭头键,然后按enter键填充搜索框

我的电脑里有一个直播版本

但是,我希望用户能够滚动列表并单击项目。我不太清楚这些列表项在DOM中的位置,因为Knockout.js会动态添加它们

下面是有问题的代码的特定部分:

<div class="hidden" id='dropdown'>
    <ul id='dropdownList'
        data-bind="template: { name:'objects', foreach:obj }, 
                   click: function(){ $('#search').text(($(this).val());}">
    </ul>
</div>

看起来它正在使用listObjItem类创建列表项,所以您可以这样做

$(function(){
   $(document).on('click', '.listObjItem', function(){
       $('#search').val($(this).text());
   });
});
<ul id='dropdownList' data-bind="template: { name:'objects', foreach:obj }, 
            click: function(){ 
                $('.listObjItem').on('click', function(){
                        $('#search').val($(this).text())
                        $('#dropdown').hide();
                        $('#search').focus();
                    ;});
                }"></ul>
 <ul id='dropdownList' data-bind="template: { name:'objects', foreach:obj }"></ul>
编辑

从下面的评论中帮助澄清。现在,您的代码如下所示

$(function(){
   $(document).on('click', '.listObjItem', function(){
       $('#search').val($(this).text());
   });
});
<ul id='dropdownList' data-bind="template: { name:'objects', foreach:obj }, 
            click: function(){ 
                $('.listObjItem').on('click', function(){
                        $('#search').val($(this).text())
                        $('#dropdown').hide();
                        $('#search').focus();
                    ;});
                }"></ul>
 <ul id='dropdownList' data-bind="template: { name:'objects', foreach:obj }"></ul>
我要说的是将代码更改为如下所示

$(function(){
   $(document).on('click', '.listObjItem', function(){
       $('#search').val($(this).text());
   });
});
<ul id='dropdownList' data-bind="template: { name:'objects', foreach:obj }, 
            click: function(){ 
                $('.listObjItem').on('click', function(){
                        $('#search').val($(this).text())
                        $('#dropdown').hide();
                        $('#search').focus();
                    ;});
                }"></ul>
 <ul id='dropdownList' data-bind="template: { name:'objects', foreach:obj }"></ul>
并在结束正文标记之前添加以下内容

<script type="text/javascript">
$(function(){
    $(document).on('click', '.listObjItem', function(){
       $('#search').val($(this).text());
       $('#dropdown').hide();
       $('#search').focus();
   });
});
</script>
单击处理程序中的这是模型数据。Knockout提供事件对象作为第二个参数,然后您可以使用event.target:


这似乎可以做到!谢谢,布莱克。尽管值得注意的是,不管出于什么原因,似乎需要点击两下才能选择它。请查看:。有什么想法吗?看看这个。我想这就是原因。@Jon如果您在document.ready中初始化.onclick事件,我想它会解决问题。