我正在使用Prototype / Scriptaculous库中的Ajax.Autocompleter类,该类将调用ASP.NET WebHandler,后者将创建一个包含建议的列表项的无序列表。
现在,我正在一个页面上,您可以在其中向“停用词”表中添加建议,这意味着如果这些建议出现在表中,将不再建议它们。
我在LI元素内放置了一个按钮,当您单击它时,它应该对页面进行ajax请求,然后将单词添加到表中。那个有效。但是,然后我希望立即刷新建议,以使建议出现而表中没有添加单词。优选地,所选择的单词是在先前点击的单词之后或之前的单词。
我该怎么做呢?现在发生的事情是,您单击的按钮的LI成为所选单词,建议消失了。
列表项如下所示:
<li>{0}
<img onclick=\"deleteWord('{0}');\" src=\"delete.gif\"/>
</li>
其中
{0}
代表建议的单词。 JavaScript函数deleteWord(w)
调用了Webhandler,该Webhandler可以将单词添加到“停用词”表中。 最佳答案
Scriptaculous Autocompleter监视“ li”上的onclick事件。当您将图像粘贴到“ li”中时,“ img”和“ li”都将获得click事件,如下所示。这就是为什么单击按钮时Autocompleter只是做其正常的事情:
<ul>
<li onclick="alert('li');">
<img onclick="alert('image')" src="blah.gif"/>
</li>
</ul>
我想做的是让您的“ onclick”设置某种状态变量,告诉您已单击Delete。然后,如果设置了状态,则override 'updateElement' in the Autocompleter不执行任何操作。一种替代方法是对整个自动完成程序进行子类化,并覆盖“ onClick”。单击图像后,列表不会消失。
要实时更新列表,请在图片的“ onclick”中也从DOM中的列表中删除“ li”。从概念上来说像这样:
img onclick="deleteWord('blah');setStateVariable();this.parentNode.parentNode.removeChild(this.parentNode);"