多次单独使用“$.each”。?

发布于 2024-12-03 15:20:08 字数 855 浏览 0 评论 0 原文

搜索后,单击结果搜索,然后单击示例中输入“INSERT VALUE HERE”旁边的加号(按钮添加输入),在新输入中 $('.auto_complete').keyup(function () { .. . 不起作用。

我认为必须单独绑定事件并使用闭包,以便每个元素都有自己的一组变量(或更改逻辑)这样只使用字段中的值并且不需要任何状态变量),

示例

参见此处

Js 完整代码: http://jsfiddle.net/6yPxn/

$.each:

var ac = $(this).text();
var ok = $.grep(data, function (e) {
    return e.name == ac;
})[0].units;
$.each(ok, function (bu, key) {
    //alert(key.name_units);
    $("<div class='mediumCell'/>").hide().fadeIn('slow').append('<b>' + key.name_units + '</b>', $('<div class="column" style="float: left;" />')).appendTo(".list_units");
});

After search and click on result search and click on plus(button add input) next to input "INSERT VALUE HERE" in the example, in new input $('.auto_complete').keyup(function () { ... not work.

I believe that have to bind the events separately and use a closure so that each element has its own set of variables(or change the logic so that only use the value in the field and don't need any state variables),

how is it?

EXAMPLE: see here

Js full code: http://jsfiddle.net/6yPxn/

$.each:

var ac = $(this).text();
var ok = $.grep(data, function (e) {
    return e.name == ac;
})[0].units;
$.each(ok, function (bu, key) {
    //alert(key.name_units);
    $("<div class='mediumCell'/>").hide().fadeIn('slow').append('<b>' + key.name_units + '</b>', $('<div class="column" style="float: left;" />')).appendTo(".list_units");
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

红颜悴 2024-12-10 15:20:08

它运行良好,但我在您提供的代码中没有看到向输入框添加事件处理程序的任何地方。

问题位于 http://www.binboy.gigfa.com/files/js /admin.js,位于顶部附近的某个位置:

$('.auto_complete').bind('keyup',function () {
 /* ... */
});

当页面加载时,它将多个事件处理程序绑定到输入框等。当您创建一个新功能时,除非您使用 jQuery 的 不会添加此功能>.live 或类似的东西。正如文档所述:

此方法 [.live()] 是基本 .bind() 方法的变体,用于将事件处理程序附加到元素。当调用 .bind() 时,jQuery 对象引用的元素会附加处理程序;稍后引入的元素则不需要,因此它们需要另一个 .bind() 调用。

我真的不想费力地完成所有嵌套的 clickdelegatebind 调用,但我向您保证这就是您的问题所在。要修复它,您可能需要在新创建的节点上运行自动完成部分,使用 .live 代替,或者只是 .clone 原始版本。

It runs fine, but I don't see anywhere in that code you've provided where you're adding an event handler to the input box.

The issue is in http://www.binboy.gigfa.com/files/js/admin.js, somewhere around the top:

$('.auto_complete').bind('keyup',function () {
 /* ... */
});

When the page loads it binds several event handlers to input boxes and the like. When you create a new one this functionality is not added unless you're using jQuery's .live or something similar. As the documentation notes:

This method [.live()] is a variation on the basic .bind() method for attaching event handlers to elements. When .bind() is called, the elements that the jQuery object refers to get the handler attached; elements that get introduced later do not, so they would require another .bind() call.

I don't really want to wade through all the nested click and delegate and bind calls, but I guarantee you that's where your problem lies. To fix it you'll probably need to have either the autocomplete section run on your newly created node, use .live instead, or just .clone the original.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文