当我通过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子句?我也试图确定我所写的内容是否适用于其他检查,而不是我正在寻找的那个。
答案 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");
});
}
}
至于你的上一个问题,你的所有代码都必须在语法上有效,否则解释器将无法运行它,抛出错误并停止。