0

我的代码如下。

$(document).ready(function($)
            {            
                var form = $("#video_detail_form");
                var name = $("#videoTitle");
                var nameInfo = $("#valid_videoTitle");
                function validateName(){
                    //if it's NOT valid
                    var titleValue=$.trim(name.val());
                    if(titleValue.length == 0){
                        nameInfo.text("Please Enter Title");
                        return false;
                    }
                    //if it's valid
                    else{
                            nameInfo.text("");
                            return true;
                        }
                }
                name.blur(validateName);
                name.keyup(validateName);
                name.change(validateName);

                $('#editVideoCancel').click(function(){

                    cancelVideoDetailAjaxCall( '/video/cancelVideoDetail', callBackCancelVideoDetail);
                });
            });

我的 cancelVideoDetailAjaxCall 函数更改了 videoTitle 输入框的文本。但是我的这段代码没有通过 name.change 捕获该事件。

如果我手动更改,那么它会捕获它。因此,当我的回调函数动态地更改文本时,更改事件不会捕获它。

我应该如何捕捉这种变化?

4

2 回答 2

0

通过在 jQuery.valHooks 中设置自定义设置器,您实际上可以使用 jQuery val 方法将值更改捕获到来自某个脚本的所有更改。

假设您将输入类型更改为 myCustomType,然后您将实现 jQuery.valHooks.myCustomType.set 方法,每次使用 val 设置输入值时都会调用该方法,并且您将在此处包含您的特定调用。但我坚持:这不是最佳实践。

您肯定会在网络上找到该挂钩的明确代码。

于 2013-04-01T06:22:51.207 回答
0

正如评论所提到的,如果您通过 jQuery 以编程方式更改值,您还必须以编程方式触发该更改,如果您希望订阅它的任何内容来注册该更改。

如果您不想“干扰”已订阅常规事件的其他事物,您可以随时制作自己的事件并相应地触发它们:

$el.on('mycustomevent', function() { ... })
$el.trigger('mycustomevent');

您甚至可以为“常规事件”和“自定义事件”订阅相同的回调:

$el.on('change', myChangeCallback);
...
$el.on('mycustomevent', myChangeCallback);

如果您不想$el.val('...').trigger('mycustomevent')重复输入,请声明一个辅助函数来为您执行此操作:

// helper function for changing the value
function changeInput(newVal) {
    if(!this.$target) this.$target = $('#text'); // stash the target for reuse
  this.$target
    // programmatically change the value; does not fire 'change' event
    .val(newVal)
    // now trigger your custom action that behaves 
        .trigger('customaction'); // add extra parameters, etc
}

完整示例:https ://jsfiddle.net/drzaus/ds6g745s/8/

于 2015-12-23T15:56:46.490 回答