【问题标题】:change event not working for a textbox when the value is assigned externally当外部分配值时,更改事件不适用于文本框
【发布时间】:2013-04-16 09:55:11
【问题描述】:

我有一个文本框和一个按钮。 当我单击按钮时,它会在文本框中设置某些值。 每当文本框的值发生更改时,我都想提交页面。

请查看here

HTML:

<input type='text' class="set" size=50>
<input type="button" id="click" value="Click" />

JQuery:

$(document).ready(function () {
    $("input").change(function () {
        alert("Changed!");
    });
    $("#click").click(function () {
        $('.set').val('Why am I not getting the alert saying  - Changed! ');
    });
});

我可以在编辑文本框内容时触发更改事件。我知道当文本框失去焦点时会触发更改事件。当我通过按钮单击更改值时不会发生这种情况。

我已经看到了以指定时间间隔(例如 0.1 秒)监视文本框以进行更改的答案。

没有其他方法可以做到这一点。 谢谢。

编辑 - 1 *抱歉,在我原来的帖子中没有说清楚*。

我的要求是在输入框内容更改时触发事件 - 不一定通过单击按钮。我添加了一个按钮只是为了解释问题。 更改可能是由于任何原因。

所以,代码(在按钮点击功能内)

$('.set').val('Hello').change();

不会解决问题。 希望这次我清楚了。

请提出建议。

【问题讨论】:

    标签: javascript jquery onclick onchange


    【解决方案1】:

    使用change() 函数设置值后手动触发事件。

    $(document).ready(function () {
        $("input").change(function () {
            alert("Changed!");
        });
        $("#click").click(function () {
            $('.set').val('Why am I not getting the alert saying  - Changed! ');
            $('.set').change();  //Manual fire of event.
        });
    });
    

    工作示例 http://jsfiddle.net/RUdu2/

    【讨论】:

    • 嗨凯文,你建议的解决方案实际上并没有解决我的问题(我猜我的问题描述不清楚)。我已经编辑了我的问题。由于任何原因,文本框的内容可能会发生变化......不仅仅是因为单击按钮。所以,我需要将一些事件处理程序附加到文本框本身。将 .change() 附加到 buttonclick 事件在这里没有帮助。有什么想法吗 ??谢谢
    【解决方案2】:

    以编程方式更改输入的值不会触发其更改事件。您必须自己使用.trigger('change')(或只是.change())同时更改其值:

    $('.set').val('Why am I not getting the alert saying  - Changed! ').trigger('change');
    

    【讨论】:

      【解决方案3】:

      当您设置或更改文本输入的值时,您也需要这样做:.change()

       $("#click").click(function () {
          $('.set').val('Why am I not getting the alert saying  - Changed! ').change();
        }); //-------------------------------------this one here-------------^^^^^^^^^
      

      因此,每当您以这种方式设置输入值时,都会在单击后立即触发更改事件。


      这可能会有所帮助

      $("input").on('change keyup', function () {
          alert("Changed!");
      });
      

      【讨论】:

      • 嗨 Jai,感谢您的回复。但这实际上不是我的要求。我已经编辑了我的问题。请看一下。谢谢。
      【解决方案4】:

      您正在以编程方式更改 .set 的值,因此该事件不会触发。您必须手动触发它:

      $('.set').val('Why am I not getting the alert saying  - Changed! ').change();
      

      【讨论】:

        【解决方案5】:
        $(document).ready(function () {
            $("input").change(function () {
                Submitform();//Function for submitting form
            });
            $("#click").click(function () {
                $('.set').val('Why am I not getting the alert saying  - Changed! ');
                Submitform();//Function for submitting form
            });
        });
        

        提交表单的函数

        function Submitform(){
        $("#YourformId").submit();//Submits your form
        }
        

        【讨论】:

          【解决方案6】:

          你可以实现喜欢

          $('.element').val('value').change(function(){
                $("#form").submit();
          }); 
          

          http://jsfiddle.net/senstar2/CHjL5/5/

          【讨论】:

            猜你喜欢
            • 2015-06-22
            • 2020-05-15
            • 1970-01-01
            • 2014-01-17
            • 2018-02-17
            • 2015-09-25
            • 1970-01-01
            • 1970-01-01
            • 2011-10-13
            相关资源
            最近更新 更多