2012-09-22 42 views
0

我正在玩REST api,我正在做一些JavaScript函数。
这里的想法是运行例如:$('#main').get('car/ford');和返回的数据将被添加到提供的元素。自定义jQuery函数 - 选择器没有找到元素

这里是所有的JavaScript:

$.fn.extend({ 
    get: function (path) { 
     request(this, 'GET', path); 
    } 
}); 

function request(element, type, path) { 
var dees = $(element); 
    $.ajax({ 
     type: type, 
     url: '/request/'+path, 
     success: function(data) { 
      console.log('Success'); 

      a = $(element); 
      b = $('#fileList'); // this is a control 

      dees.html(data); 
     } 
    }); 
} 

(function() { 
    console.log('running'); 
    $('#fileList').get('car/ford'); 
})(); 

我遇到的问题是,当我运行a.html(data);
什么都不会改变。但是,如果我运行b.html(data); 一切工作就像它应该。

所以这两个选择器有区别。
在一个所述元件没有找到则为a.length == 0
和B上的元件被发现b.length个== 1

为什么不是由选择器和如何解决它发现该元件?

回答

2

该问题已通过在调用函数前添加$来解决。

来源:

(function() { 
    console.log('running'); 
    $('#fileList').get('car/ford'); 
})(); 

要:

$(function() { 
    console.log('running'); 
    $('#fileList').get('car/ford'); 
}); 
+1

+1达到解决方案:) – Adil

+1

你也得到了我的! – Nelson

+0

+1对你来说都很好:) – Patrik

1

变化element$(element)

当请求为呼叫request(this, 'GET', path);这代表javascript对象,它应该是jQuery对象。你需要传递jquery对象,或者像传给我一样传递给jquery对象。

$.fn.extend({ 
    get: function (path) { 
     alert(this.tagName); 
     var objToPass = $(this); 
     request(objToPass, 'GET', path); 
    } 
}); 
function request(javascriptObj, type, path) { 
    element = $(javascriptObj); 
    $.ajax({ 
     type: type, 
     url: '/request/'+path, 
     success: function(data) { 
      console.log('Success'); 

      a = $(element); 
      b = $('#fileList'); // this is a control 

      a.html(data); 
     } 
    }); 
} 

更新

获得功能应该document.ready被实例化的调用这可以通过简单地增加$

变化

(function() { 
    console.log('running'); 
    $('#fileList').get('car/ford'); 
})(); 

$(function() { 
    console.log('running'); 
    $('#fileList').get('car/ford'); 
})(); 
完成
+0

似乎并不奏效。 element.length仍然返回0.但是你和Nelson都有相同的答案,所以也许会有另一个错误。 – Patrik

+0

那么在调用函数时可能会有问题,我更新了我的答案并更改了调用者函数。你可以试试看吗? – Adil

+0

是的。我试过你的更新和this.tagName返回undefined – Patrik

1

你可以尝试以下方法:

function request(element, type, path) { 
    var dees = $(element); 
    $.ajax({ 
      type: type, 
      url: '/request/'+path, 
      success: function(data) { 
       console.log('Success'); 
       dees.html(data); 
      } 
    }); 
} 

的情况下,$(this)变量与ajax()块自己$(this)变量冲突。

+0

似乎没有工作。 dees.length返回0.但是你和Adil都有相同的答案,所以也许会有另一个错误。 – Patrik