添加if到AJAX for Rails(检查这是否== DOM元素)

时间:2013-02-17 01:29:24

标签: javascript jquery ajax

当我通过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是表单中的select元素。当它发生变化时,它会执行.post函数并将其定向到URL“/ people / thisguy”。

我想添加一个if语句来有条件地执行.post函数,该函数由正在执行.subSelectWithAjax()函数的元素的id确定。我试过这样:

$.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中,if语句是否必须在语法上有效才能执行else子句?我也试图确定我所写的内容是否适用于其他检查,而不是我正在寻找的那个。

1 个答案:

答案 0 :(得分:1)

您的if将始终失败,导致else块运行,因为您正在比较苹果和橙子:您需要比较两个HTML元素或两个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");
        });
    }
}

至于你的上一个问题,你的所有代码都必须在语法上有效,否则解释器将无法运行它,抛出错误并停止。