0

ID で識別される特定の DOM 要素が変更されたときに .post() 関数を実行する JavaScript を使用しています。

$.fn.subSelectWithAjax = function() {
  var that = this;

  this.change(function() {
    $.post("/people/thisguy", {id: that.val()}, null, "script");
  });
}

$(document).ready(function(){
    $("#this_guy").subSelectWithAjax();
});

#this_guyフォーム内の選択要素です。変更すると、.post 関数を実行し、URL「/people/thisguy」に送信します。

.subSelectWithAjax() 関数が実行されている要素の ID によって決定される条件付きで .post 関数を実行する if ステートメントを追加したいと考えています。私はそれを次のように試しました:

$.fn.subSelectWithAjax = function() {
    var that = this;

    if(this==document.getElementById('#this_guy')) {
        this.change(function() {
            $.post("/people/thisguy", {id: that.val()}, null, "script");
        });
    } else {
        this.change(function() {
            $.post("/people/anyotherguy", {id: that.val()}, null, "script");
        });
    }
}


$(document).ready(function(){
    $("#this_guy").subSelectWithAjax();
    $("#that_guy").subSelectWithAjax();
    $("#the_other_guy").subSelectWithAjax();
});

最初の .post 関数は、変更された要素の ID が this_guy である場合、つまり URL "/people/thisguy" に直接送信される場合に実行されると予想しています。ただし、else 句で指定された .post 関数は常に実行されます。これは、等価演算子に適切な引数を渡すことができないために発生すると結論付けました。

また、JavaScript では、else 句を実行するには、if ステートメントが構文的に有効である必要がありますか? また、私が書いたものが、私が探しているものではなく、他のチェックに有効かどうかを判断しようとしています.

4

1 に答える 1

1

リンゴとオレンジを比較しているためif、常に失敗し、elseブロックが実行されます。2 つの HTML 要素または 2 つの jQuery オブジェクトを比較する必要がありますが、現在は jQuery オブジェクトを HTML 要素と比較しているため、決して平等にはなりません。

$.fn.subSelectWithAjax = function() {
    var that = this; // In this context `this` is a jQ object, not an html elem

    if( this[0] == document.getElementById('#this_guy')) {
        this.change(function() {
            $.post("/people/thisguy", {id: that.val()}, null, "script");
        });
    } else {
        this.change(function() {
            $.post("/people/anyotherguy", {id: that.val()}, null, "script");
        });
    }
}

最後の質問については、すべてのコードが構文的に有効である必要があります。そうしないと、インタープリターはコードを実行できず、エラーをスローして停止します。

于 2013-02-17T01:36:57.583 に答える