2012-09-22 41 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