如果不清楚的话,我不确定如何对这个问题说出这样的道歉。我有这个代码在3个下拉菜单中的任何一个更改时运行AJAX查询:
$('#ass-seenByName, #ass-seenByName1, #ass-seenByName2').change(function() {
$.ajax({
type: "GET",
url: "getMDSSpeciality.php",
data: { "mds_name": $(this).val() },
async: false,
success: function(msg){
alert("Hello " + msg);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
databaseError({
title: "Database error",
string: "Unable to get speciality for selected individual",
file: window.location.pathname,
actualError: errorThrown
});
}
});
});
返回的msg
值需要转到3个字段中的一个,这取决于更改的特定下拉菜单。我的问题是我不知道如何在jQuery中更改3个可能的下拉菜单中的哪一个而不为每个单独的下拉菜单重复此代码块3次。
答案 0 :(得分:3)
您可以在事件处理程序中使用this
来引用触发处理程序的元素,这样您就可以创建一个闭包变量,该变量将引用单击处理程序中的元素,该元素可以在成功处理程序中用于设置消息
$('#ass-seenByName, #ass-seenByName1, #ass-seenByName2').change(function () {
var $this = $(this);
$.ajax({
type: "GET",
url: "getMDSSpeciality.php",
data: {
"mds_name": $(this).val()
},
async: false,
success: function (msg) {
alert("Hello " + msg);
$this.html(msg)
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
databaseError({
title: "Database error",
string: "Unable to get speciality for selected individual",
file: window.location.pathname,
actualError: errorThrown
});
}
});
});
答案 1 :(得分:0)
是的,使用“this”并且如果要附加到选项的选项, 试试这个,
$('#ass-seenByName, #ass-seenByName1, #ass-seenByName2').change(function () {
$.ajax({
type: "GET",
url: "getMDSSpeciality.php",
data: {
"mds_name": $(this).val()
},
async: false,
success: function (msg) {
$(this).empty();//empties the select
$(this).append($('<option>').text(msg).attr('value', msg));//appends to options
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
databaseError({
title: "Database error",
string: "Unable to get speciality for selected individual",
file: window.location.pathname,
actualError: errorThrown
});
}
});
});