我的html页面带有链接
当用户点击该链接时,应该出现一个新的选择标记
<div class="container" id="addCell">
<ul class="containerUL">
<li class="containerLI">
<p>
<label>Name</label>
<input type="text" class="longInput1"/>
<p>
<p>
<label>City</label>
<select id="countrySelector">
</select>
</p>
</li>
<li class="containerLI">
<p>
<label>Inserted cells</label>
<a href="#" class="smallLink" id="acaclink">new</a>
</p>
</li>
<li class="containerLI">
<input type="submit" class="button1" value="save"/>
</li>
</ul>
</div>
$("#addCell").ready(function(){
$("#addCell").on('click',"#acaclink",function(){
$.getJSON("http://localhost/Mar7ba/Cell/getAllCells/TRUE",function(data){
var options = '';
options+="<option>select cell</option>";
for(var i=0;i<data.length;i++){
options += "<option>"+data[i]+"</option>";
}
$(this).closest('li').append('<p>\n\
<label>Select Cell</label>\n\
<select name="acSelect[]">\n\
'+options+'\n\
</select>\n\
</p>');
});
});
});
1-我正在检查JSON呼叫并且没有错误 2-我是警报选项,它按我想要的方式工作
我的问题是:当我用$(this).closes('li')
替换$('ul').append
时
它有效,但当我把最接近的李它没有。请问哪里有错误
答案 0 :(得分:5)
那是因为匿名函数中的$(this)
具有另一个范围并引用另一个对象
$("#addCell").ready(function(){
$("#addCell").on('click',"#acaclink",function(){
var me = this; // we use "me" as a closure to the object we clicked at
$.getJSON("http://localhost/Mar7ba/Cell/getAllCells/TRUE",function(data){
var options = '';
options+="<option>select cell</option>";
for(var i=0;i<data.length;i++){
options += "<option>"+data[i]+"</option>";
}
$(me).closest('li').append('<p>\n\ // <---- here we use "me"
<label>Select Cell</label>\n\
<select name="acSelect[]">\n\
'+options+'\n\
</select>\n\
</p>');
});
});
});
答案 1 :(得分:1)
this
在getJSON
回调中有不同的含义。
您可以在getJSON
之外保留参考,然后在里面使用它。
$("#addCell").ready(function(){
$("#addCell").on('click',"#acaclink",function(){
var that = this; // reference this
$.getJSON("http://localhost/Mar7ba/Cell/getAllCells/TRUE",function(data){
var options = '';
options+="<option>select cell</option>";
for(var i=0;i<data.length;i++){
options += "<option>"+data[i]+"</option>";
}
// use it here
$(that).closest('li').append('<p>\n\
<label>Select Cell</label>\n\
<select name="acSelect[]">\n\
'+options+'\n\
</select>\n\
</p>');
});
});
});
或使用$.ajax
及其context
属性。
$.ajax({
url:"http://localhost/Mar7ba/Cell/getAllCells/TRUE",
context:this,
dataType:'json',
success: function(data){
// your code
$(this).closest('li').append('<p>\n\...'
}
});
这相当于您的代码,因为getJSON
只是一个包装器,但您可以获得所有可用选项,例如context:
。