当我进入页面时,在控制台中显示:Uncaught TypeError:无法使用' in'运营商搜索' height'在undefined中, 并且在值0之前(来自行console.log(i);) 我想打电话给ajax"我"点击元素后。 我不明白为什么apper Uncaught TypeError,以及为什么它在没有任何点击的情况下输入loadSingleIns(i)。
脚本是:
..... success: function(response) {
console.log(JSON.parse(response));
var instructor=JSON.parse(response);
var el="";
for(var i=0;i<instructor.length;i++){
$(document).on ("click", ".insegnanti#i"+[i+1], loadSingleIns(i));
....
所谓的函数是:
function loadSingleIns(i){
console.log(i);
$(this).animate({
opacity: 0.25,
left: "+=50",
height: "toggle"
}, 5000, function() {
// Animation complete.
});
//here i want to call ajax for the element i
}
我知道有这样的问题,但我无法找到解决方案。
答案 0 :(得分:0)
你可能需要在第三个参数中传递处理程序引用,你可以在其中调用函数loadSingleIns
$(document).on ("click", ".insegnanti#i"+[i+1], loadSingleIns);
要从id获取i,您可以使用以下代码。
function loadSingleIns(){
i = this.id.replace('i','');
}
作为一个额外的注释你可能关于选择器".insegnanti#i"+[i+1]
,因为id应该是唯一的,你可以从选择器中删除类选择器。
答案 1 :(得分:0)
不需要在$(document).on ("click", ".insegnanti#i"+[i+1], loadSingleIns);
函数,元素引用和事件自动传递函数中传递参数..
$(document).on ("click", ".insegnanti#i"+[i+1], function(Event){
loadSingleIns(Event, this);
});
// function with 2 params
function loadSingleIns(e, refe){
console.log(e, refe)
}
或者如果你真的想传递params然后在回调函数内调用函数
select
答案 2 :(得分:0)
正如我在评论中提到的这段代码
for(var i=0;i<instructor.length;i++){
$(document).on ("click", ".insegnanti#i"+[i+1], loadSingleIns(i));
除了loadSingleIns(i)
问题外 - 看起来并不正确。那不是你应该如何使用课程。也许你的意思是使用id属性......
假设所有这些元素都在页面上,你可以完全摆脱循环,使用相同的类捆绑这些元素,并在单独的属性中包含元素的id:
HTML
<div class="insegnant" data-id="1">Element 1</div>
<div class="insegnant" data-id="2">Element 2</div>
JS
$(document).on('click', '.insegnanti', loadSingleIns);
function loadSingleIns() {
var id = $(this).data('id');
$(this).animate({
opacity: 0.25,
left: "+=50",
height: "toggle"
}, 5000, function() {
// when the animation has completed run the ajax
// this example adds the id on to the end of the URL
// you can move this function outside of the animation if you want
// I thought it would be better here
$.ajax({
url: 'http://demo.com/id=' + id
...
success: function (data) {
// do something with data
}
});
});
}