function CheckAvailableScope() {
$("input[name='chkXZSYY']").each(function () {
if ($(this).attr("checked")) {
var inputName = $(this).attr("inputName");
$("select[lang='availableScope']").each(function () {
//var that = this;
alert(this);
PageMethods.GetOption(inputName, myculture, function (results) {
alert(this);
var option = $(this).children(results[1]);
if (option.length == 0) {
$(this).append(results[0]);
}
})
})
}
上段代码有两处alert(this),虽是都在.each()中的,但由于后一个this是在PageMethods的方法中,所以所指的并不是each的元素。请看下图
第一次alert(this)的结果,是each里的元素
第二次alert(this)的结果,则是window对象了
由于在PageMethods方法中,我进行了$(this).append(),但窗体无法添加内容,所以报了以下的错
是在jquery的脚本里,很难看出具体问题,所以迷茫了好一阵,网上查了很久,也调试了很久,才意识到this所指定的对象不同,PageMethods应该是窗体调用的方法,所以此时this的对象被转换了,这方面应该还能深入研究下。
方法后来改成在PageMethods外把each的this赋值给that,在PageMethods用$(that).append()可正确运行
function CheckAvailableScope() {
$("input[name='chkXZSYY']").each(function () {
if ($(this).attr("checked")) {
var inputName = $(this).attr("inputName");
$("select[lang='availableScope']").each(function () {
var that = this; //each对象赋值给that
//alert(this);
PageMethods.GetOption(inputName, myculture, function (results) {
//alert(this);
var option = $(that).children(results[1]);
if (option.length == 0) {
$(that).append(results[0]);
}
})
})
}