Jquery不会多次更新元素中的文本

时间:2014-03-13 01:14:10

标签: javascript jquery dynamic input getelementbyid

所以我有一个有onblur / onkeyup / onclick触发器的文本字段。这很好。

获取该值并将其添加到<b id="search_term"></b>中。这是有效的,但只是第一次在视觉上。但是,检查员每次都会更新它。

正在更新的元素处于固定位置,如果搜索输入不为空,我使用JQuery $( "#search_results" ).slideDown( "slow", function() {});来显示容器元素。

如果我单击关闭按钮以触发slideUp()功能,一瞬间您可以在元素消失之前看到元素中的更新文本。

有没有人遇到过这种现象?搜索没有任何相似之处。

我已经尝试了

$("#search_term").text(string);
$("#search_term").html(string);
document.getElementById("search_term").innerHTML=string;

它们都没有用实际变量更新。

我还测试了使用JQuery从文本框中检索值。如果您在运行该功能一次后更改文本框的值,则获取更新值的唯一可能方法是$('#test_box').attr("value"); .text().html()仍显示第一个值。

这是JQuery中的错误还是我做错了什么?

一直想要解决几个小时。谢谢你的任何建议。

修改 将其缩小为slideDown()slideUp()的问题。如果我删除它们并仅使用.show(),则元素会正常更新。 有没有办法强制元素重新渲染?或者我应该找到slideDown / Up的替代品吗?

2 个答案:

答案 0 :(得分:0)

通常的原因是您已将事件绑定到已删除/重新添加的元素,因此事件已消失。

根据此示例,更改text本身应该可以无限期地继续:

<div id="example"></div>
<div id="test">Go</div>

JS:

$('#test').click(function() {
   $('#example').text(Date.now); 
});

通过点击此处的GO文字来查看正在运行的内容:http://jsfiddle.net/5BXqg/

答案 1 :(得分:0)

答案最终成为我在slideDown()内所做的事情。

我在做:

$("#seach_container").slideDown("slow", function() {
    document.getElementById("body").style.position="fixed"; // to prevent bg scrolling
    document.getElementById("body").style.overflowY="scroll"; // to prevent doc jumping
    // Applying these two lines multiple times was giving me the issue of text not updating.
});

我最终设置了一个布尔值,以确保我只将位置更改为固定一次。马上修好了。

非常具体的情况,但也许这个解决方案可以节省6个小时的费用。哈