【问题标题】:jQuery addClass when value of hidden input changes dyamically当隐藏输入的值动态变化时的jQuery addClass
【发布时间】:2011-06-11 11:05:55
【问题描述】:

我有一个联系表单,它会在成功完成 sendmail 功能时向隐藏输入发送一个值。我想检测这个值的变化,然后用它把一个类应用到一个 div/paragraph。

我最近问了一个类似的问题,我知道这需要脚本在加载 DOM 后不断检查文档,但即使在添加 .change() 之后,它似乎也不想添加类。

这是 jQuery:

$(document).ready(function() {
   $("#acf_success_sent").change(function(){
    if ($("#acf_success_sent").val() == "1"){
     $("#acf_verified").addClass('gone');
     }
   });

 });

任何帮助都会很棒。如果您有兴趣,这里有一个表格测试版本的链接,一切正常,除了验证符号在成功发送后不会消失http://seeshell.me/forms/contact.php

【问题讨论】:

    标签: javascript jquery javascript-events addclass


    【解决方案1】:

    代码 更新<input> 元素的值时,不会触发“更改”事件,因此您注册的处理程序不会运行。但是,您可以做的是从看门狗中触发“更改”:

    var watchdog = setInterval(function() {
      if ($('#acf_success_sent').val() !== originalValue)
        $('#acf_success_sent').trigger('change');
    }, 100);
    

    如何设置“originalValue”取决于您的应用程序。例如,您可以保留一个单独的“.data()”值,并注意您保存的值何时与当前的“值”属性不同。或者您可以将值保存在闭包变量中:

    var watchdog = (function() {
      var $acfSuccessSent = $('#acf_success_sent'), cachedValue = $acfSuccessSent.val();
      return function() {
        if (cachedValue !== $acfSuccessSent.val())
          $acfSuccessSent.trigger('change');
      };
    })();
    

    【讨论】:

    • originalValue 将始终为 0,除非发送表单,所以我可以输入 !== "0") 我猜?!我会尝试一下。谢谢
    • 是的,如果您知道原始值,并且您只关心从中的变化,那么您可以简化。此外,当然,为了更简单,您总是可以在计时器例程本身内完成所有工作:-)
    • 它第一次工作。非常感谢,现在买一本jQuery书,我受够了这么蹩脚的。
    • 好消息:O'Reilly is running a sale on JavaScript books (maybe US-only unfortunately ...)(另外,很抱歉,2012 年的人 :-)
    • 或 if ($('#acf_success_sent').val() !== $('#acf_success_sent')[0].defaultValue)
    猜你喜欢
    • 2011-09-25
    • 2010-09-15
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多