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”。

我想添加一个 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 子句?我也在尝试确定我所写的内容是否适用于其他检查,而不是我正在寻找的那个。

4

1 回答 1

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");
        });
    }
}

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

于 2013-02-17T01:36:57.583 回答