1

我正在使用 Prototype/Scriptaculous 库中的 Ajax.Autocompleter 类,它调用一个 ASP.NET WebHandler,它创建一个包含建议的列表项的无序列表。

现在我正在开发一个页面,您可以在其中向“停用词”表添加建议,这意味着如果它们出现在表中,将不再被建议。

我在 LI 元素中放置了一个按钮,当您单击它时,它应该向页面发出 ajax 请求,然后将单词添加到表中。这样可行。但是我希望立即刷新建议,以便建议出现时没有刚刚添加到表中的单词。优选地,选择的词是之前点击的词的下一个或之前的词。

我该怎么做呢?现在发生的情况是,您单击按钮的 LI 成为选定的单词,并且建议消失了。

列表项如下所示:

<li>{0}
 <img onclick=\"deleteWord('{0}');\" src=\"delete.gif\"/>
</li>

where{0}代表建议的词。JavaScript 函数deleteWord(w)会调用 webhandler,它可以将单词添加到“停用词”表中。

4

1 回答 1

0

Scriptaculous Autocompleter 监视“li”上的 onclick 事件。当您将图像粘贴到“li”中时,“img”和“li”都会获得点击事件,如下所示。这就是为什么 Autocompleter 在单击按钮时只是做正常的事情的原因:

<ul>
  <li onclick="alert('li');">
    <img onclick="alert('image')" src="blah.gif"/>
  </li>
</ul>

我会尝试让您的“onclick”设置某种状态变量,告诉您已单击删除。然后,如果设置了状态,则覆盖自动完成器中的“updateElement”以不执行任何操作。另一种方法是将整个自动完成器子类化并覆盖“onClick”。当您的图像被点击时,这将使列表不会消失。

要实时更新列表,请在图像的“onclick”中,也从 DOM 中的列表中删除“li”。像这样在概念上:

img onclick="deleteWord('blah');setStateVariable();this.parentNode.parentNode.removeChild(this.parentNode);"
于 2008-09-14T02:25:57.957 回答