【问题标题】:jQuery: Bind an element to show / hide when its contents are changedjQuery:绑定元素以在其内容更改时显示/隐藏
【发布时间】:2012-04-15 19:33:17
【问题描述】:

假设我的页面上有消息:

<div class="message one">Here is some text.</div>
...
<div class="message two">Here is other text for something else.</div>

我有很多事件可能会在消息中添加一些文本,或者将其清除。

现在我有这个设置,每个消息发送函数调用也会检查消息是否可见并根据需要更改状态。这意味着这个基本逻辑有很多重复。

我想设置一个在任何消息 div 更改时触发的绑定,这样如果它设置为空,它会向上滑动,如果它从空设置为有文本,那么它会向下滑动。

这可能吗?如果可以,怎么做?

【问题讨论】:

    标签: javascript jquery events binding javascript-databinding


    【解决方案1】:

    根据此链接,这将被称为 JQuery 不支持的“突变事件”:Detect element content changes with jQuery

    我建议简单地创建一个辅助函数来将逻辑整合到一个地方。例如:

    function updateElement(selector, newText)
    {
        $(selector).text(newText);
        if (newText == '') $(selector.slideUp());
        else $(selector.slideDown());
    }
    

    【讨论】:

    • 我明白了,我想我可以调整它以减少很多重复。感谢您的链接和建议!
    【解决方案2】:

    这是我想不到的东西,并不是您正在寻找的东西,而是在更新 div 文本时调用的函数,它需要您从单独的类中更改 div 类: 'message one' 到单个类 'message_one'

    <script>
        $(function(){
    
            function show_message(class, message)
            {
                var $div = $('div[class='+class+']');
    
                $div.slideUp(250, function(){
    
                    if (message.length > 0)
                    {
                        $div.html(message);
                        $div.slideDown(250);
                    }
                });
            }
    
            // example of calling this
    
            $('button').click(function(){
                // hide the div
                show_message('message_one', '');
            });
    
            $('someotherbutton').click(function(){
                // this will slideup and then slidedown
                show_message('message_two', "<p>Here's my message.</p>");
            });
    
        });
    </script>
    

    【讨论】:

      【解决方案3】:

      试试这个:

      $("div").live("change", function() {
      
         if ( $(this).text().length == 0) {
      
             $(this).slideUp();
      
         }  else { $(this).slideDown();}
      
      });
      

      【讨论】:

      • 我很想知道这是否可行,但我无法让它发挥作用。您确定这种方法吗?
      • 不幸的是,我还没有为这个特定功能尝试过这个事件处理,而不是 .live(), .bind() 更改事件,这应该可以工作。
      • 其实我一开始也是这样尝试的,但是没有成功。根据 API:“此事件仅限于 元素、
      • 是的,我在这里做了一个小实验:jsfiddle.net/EdtL7No dice。
      • 是的,更改仅限于表单元素,尝试绑定此事件DOMNodeInserted 和DOMNodeRemoved。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2019-10-26
      • 1970-01-01
      相关资源
      最近更新 更多