0

我一直在使用 PHP/MySQL 和带有 Prototype/Scriptaculous 的 JavaScript 构建应用程序。

一个页面有一个搜索联系人字段,在 HTML 表中有一组默认数据。用户输入一些字符,表格就会更新。

实际发生的是该表被新表和新数据替换。

我有一个适用于该表的 JavaScript,它通过页面底部的脚本标记以标准方式加载。

问题是,它只适用于默认数据(与页面一起加载的部分),当搜索更新表数据时,脚本停止工作。搜索仍然有效,因为它最初是与页面一起加载的,但似乎我的脚本不知道页面更新或新数据。

我怎样才能让它工作?我必须在每个 Ajax 调用中包含脚本吗?

谢谢丰富

4

2 回答 2

1

发布相关代码会有所帮助,但您很可能已将事件侦听器附加到由 AJAX 调用替换的元素。

如果是这种情况,您将需要重新创建事件处理程序并将其重新附加到新元素,即使该新元素完全等同于它正在替换的元素。

于 2009-08-23T14:34:14.730 回答
1

好的,我将在这里发布一些代码。但是是的,事件侦听器附加到元素。

这是我正在构建的一些 JavaScript 类,它从搜索字段中查找事件,从该字段和其他表单元素中收集数据并将它们设置为this.params.

数据返回到 AJAX 对象后,更新到页面,与原始代码相同(不同的行)。

var Compass_Search = Class.create({ ...

search: function() {
    $('search_form').observe('change', this.get_data.bind(this));
},

get_data: function(e) {
    var ele =   e.target;
    var filters = $$('.search_option');
    if($(ele).tagName == 'INPUT') {
        if($(ele).readAttribute('type') == 'checkbox') {
            this.watch_filters(filters);
        }
    }
    
    if(this.default_text == $('search_box').value) {
        this.set_text_value('null');
    } else {
        this.set_text_value($('search_box').value);
    }

    
    new Ajax.Request(this.url, {
        method: 'post',
        parameters: this.params,
        onComplete: function(r) {
            result_text = r.responseText;
            $('main').update(result_text);
        }
    });
},

...});
于 2009-08-23T14:50:39.757 回答