如何在jquery中处理更改事件?

时间:2009-07-03 20:26:49

标签: jquery

以下功能有什么问题?错误中有一个

标记,当错误发生时它会被填充,因此错误会显示一秒钟然后消失。

$('#error').hide(); 
$('#error').find('p').change(function(){
    if($(this).contents().length > 0){
        $(this).show();
    }
});

编辑:添加错误文件

<div id="error" class="error">
<span style="float:right" >CLICK to remove.</span>
{% block error %}
    {% ifnotequal '' where %}
    <p>where-{{where}}</p>
    {% endifnotequal %}
    {% if error %}
    <p> error-{{error}}</p>
    {% endif %}
{% endblock %}
</div>

4 个答案:

答案 0 :(得分:2)

AFAIK,更改事件仅适用于输入元素,它不会为您的段落元素触发。

修改 如果你的问题是段落再次变得不可见,那么必须有一些其他代码可以做到这一点。检查代码中的setInternal或setTimeout方法调用。

答案 1 :(得分:1)

如果我正确理解了您的问题,那么您的代码有什么问题,就是期望调用onchange上的p事件。这不是通常发生的事情。您应该阅读onchange并将其与您期望的任何行为进行比较/对比(我不太了解)。

答案 2 :(得分:1)

看起来您正在设置更改时显示的<p>。为什么<p>会发生变化?顺便说一下,隐藏了#error元素,因此如果隐藏其父级,设置<p>以显示它将不会执行任何操作。我认为你可能需要.end()来恢复#error元素。

我认为这更符合您的要求:

$('#error').hide(); 
$('#error').find('p').change(function(){
        if($(this).contents().length > 0){
                $(this).parent().show();    // .parent() should return #error
        }
});

答案 3 :(得分:0)

您的代码中没有JavaScript错误。问题是你正在隐藏错误div。查找是一种遍历div的所有子项的遍历方法。然后你选择用隐藏的父母显示div。它不会显示任何内容。