Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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处理程序不使用动态添加的id_Jquery_Dynamic_Click_Knockout.js - Fatal编程技术网

jquery处理程序不使用动态添加的id

jquery处理程序不使用动态添加的id,jquery,dynamic,click,knockout.js,Jquery,Dynamic,Click,Knockout.js,我的页面上有以下元素,它从我的javascript MVC框架中获取一个动态添加的ID: <input data-bind="attr: { id: attributeName }" type="text" /> 当使用动态“id”属性将输入元素动态添加到页面时,上述代码似乎不起作用。我在knockout.js foreach循环中将此元素添加到页面中,但我不知道这是否重要。还有其他人碰到过这个吗 这是真正的代码。。。如何模拟$(“body”).on()方法来替换此方法: $("

我的页面上有以下元素,它从我的javascript MVC框架中获取一个动态添加的ID:

<input data-bind="attr: { id: attributeName }" type="text" />
当使用动态“id”属性将输入元素动态添加到页面时,上述代码似乎不起作用。我在knockout.js foreach循环中将此元素添加到页面中,但我不知道这是否重要。还有其他人碰到过这个吗

这是真正的代码。。。如何模拟$(“body”).on()方法来替换此方法:

 $("#job_title").typeahead({
    source: searchFunction,        
    onselect: function(obj) {            
    }
 });
您可能要尝试:


$(“body”)。在(“click”、“#job_title”,function(){alert('hi');
});


这应该是可行的,因为您正在动态添加元素,所以单击不可行。

为什么不使用单击数据绑定呢?比如:

<input data-bind="attr: { id: attributeName }, click: functionToCall" type="text" />


这将允许您从DOM操作中抽象出来,这是使用数据绑定的主要优势之一。您甚至可以让该函数来自视图模型上的一个属性,该属性可以对上下文做出动态反应。

我建议您编写一个自定义的knockout活页夹,如下所示

ko.bindingHandlers.typehead = {
    init: function(e){
        $(e).typeahead({
            source: searchFunction,        
            onselect: function(obj) {            
            }
         });
    }
};
然后像其他脱模粘合剂一样使用粘合剂

<input id="job_title" data-bind="attr: { id: attributeName }, typehead:true" type="text" />


因为在分配单击事件时,动态添加的输入元素在页面上不存在。。所以从技术上讲,点击事件从未被绑定。我也是这么想的,但如果我执行此警报(“工作头衔”).length)。它返回1而不是0。@Adamlevit我相信,因为它可以识别它,但click事件没有绑定到它。该警报在哪里?我将元素推到页面上,并在下面的一行添加click处理程序。这是比赛条件吗?所以这是有效的。。。这让我进入解决方案的第一部分。现在,因为我真的将此作为一个原始示例来使用twitter引导程序typeahead插件。我如何使用它来模拟这段代码:$(“#job_title”).typeahead({source:searchFunction,onselect:function(obj){});问题是我需要在元素中添加twitter引导typeahead插件……在这种情况下,定制绑定实际上可能是一种方式——类似于Wiz的答案
ko.bindingHandlers.typehead = {
    init: function(e){
        $(e).typeahead({
            source: searchFunction,        
            onselect: function(obj) {            
            }
         });
    }
};
<input id="job_title" data-bind="attr: { id: attributeName }, typehead:true" type="text" />