"未捕获的TypeError:无法在'中使用'运营商"使用价值$(this)

时间:2015-05-28 09:52:50

标签: javascript jquery ajax

当我进入页面时,在控制台中显示: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

}

我知道有这样的问题,但我无法找到解决方案。

3 个答案:

答案 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
      }
    });

  });
}