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 に変更し、val を使用して入力値を設定するたびに呼び出される jQuery.valHooks.myCustomType.set メソッドを実装し、ここに特定の呼び出しを含めるとします。しかし、私は主張します:それはベストプラクティスではありません.

そのフックの明示的なコードがウェブ上で確実に見つかります。

于 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 に答える