2017-08-31 175 views
0

道歉,但無法找到此問題的答案。我在HTML上找到項目並將其推送到一個對象,但我無法弄清楚我的生活,爲什麼這個函數不返回對象?我可以在沒有問題的情況下進行安裝。嘗試從函數返回對象

function getItem(obj){ 
 
    var itemsObj; 
 
    $('.info').on('click', function(){ 
 
    itemsObj = {}; 
 
    $this = $(this); 
 
    itemsObj.gameImg = $this.parent().parent().find('img').attr('src'); 
 
    itemsObj.gameTitle = $this.parent().parent().find('p').text(); 
 
    itemsObj.gameInfo = $this.parent().parent().find('h2').text(); 
 
    // console.log(itemsObj); 
 
    return itemsObj; 
 
    }); 
 
} 
 
//getItem(); 
 
console.log(getItem());
<div class="col-lg-3 game"> 
 
       <div class="view view-first"> 
 
       <img src="img/deathstranding.jpg"/> 
 
       <div class="mask"> 
 
       <h2>Death Stranding</h2> 
 
       <p>Death Stranding is an upcoming action video game developed by Kojima Productions and published by Sony Interactive Entertainment for PlayStation 4. It is the first game by game director Hideo Kojima and his company following the 2015 disbandment of Kojima Productions as a subsidiary of Konami and subsequent reformation as an independent studio.</p> 
 
        i<a href="#" class="info">♥</a> 
 
       </div> 
 
      </div>

+4

你的外部函數沒有return語句。 – david25272

+0

此外itemsObj只會在用戶單擊.info元素後纔會填充,而不是在調用getItem函數時調用 – Frankusky

+0

嘗試從事件處理函數返回值沒有任何意義。它應該返回到哪裏?不是你調用事件處理程序,而是事件發生時的瀏覽器。 –

回答

1

它不返回任何東西那是因爲你返回click事件偵聽器函數的數據不getItem()功能的原因,也沒有辦法回到它的方式

function getItem(obj){ 
    var itemsObj; 
    $('.info').on('click', function(){ 
    itemsObj = {}; 
    $this = $(this); 
    itemsObj.gameImg = $this.parent().parent().find('img').attr('src'); 
    itemsObj.gameTitle = $this.parent().parent().find('p').text(); 
    itemsObj.gameInfo = $this.parent().parent().find('h2').text(); 
    // This sends data to click event listener not getItem() 
    return itemsObj; 
    }); 
} 

爲了接收你想要的物品,你應該實現回撥

function getItem(callback){ 
    var itemsObj; 
    $('.info').on('click', function(){ 
    itemsObj = {}; 
    $this = $(this); 
    itemsObj.gameImg = $this.parent().parent().find('img').attr('src'); 
    itemsObj.gameTitle = $this.parent().parent().find('p').text(); 
    itemsObj.gameInfo = $this.parent().parent().find('h2').text(); 
    // call the callback function parameter and send itemsObj as argument, callback function then received the argument as you wanted it to be. Then execute stuff from there. 
    callback(itemsObj); 
    }); 
} 

// send a function instead for getItem to call when all is well 
getItem(function (data) { 
    // here you will receive the data 
    console.log(data); 
    // stuff 
}); 

提示:如果你想辦法解決冷卻器要實現successfail場景檢查jQuery DefferedJavaScript Promises

希望幫助

+0

感謝您對Masterpreenz的幫助。將查看您的解決方案和您提供的鏈接。 – Lucky500

1

,因爲你是從一個事件處理程序是另一個函數本身返回。 如果您只想將它​​推送到本地存儲,爲什麼不在事件處理程序中執行?

$('.info').on('click', function(){ 
 
    itemsObj = {}; 
 
    $this = $(this); 
 
    itemsObj.gameImg = $this.parent().parent().find('img').attr('src'); 
 
    itemsObj.gameTitle = $this.parent().parent().find('h2').text(); 
 
    itemsObj.gameInfo = $this.parent().parent().find('p').text(); 
 
    // getting previous info 
 
    var savedInfo = localStorage.getItem("gamesinfo"); 
 
    // since everything is saved as string , we need to use json 
 
    savedInfo = JSON.parse(savedInfo); 
 
    // check if its not null 
 
    savedInfo = savedInfo ? savedInfo : {}; 
 
    // use a unique identifier to save objects , do not push the object into an array every time 
 
    savedInfo[itemsObj.gameTitle] = itemsObj; 
 
    // stringify data and save it 
 
    localStorage.setItem("gamesinfo", JSON.stringify(savedInfo)); 
 
    
 
    
 
    
 
    // to retrieve all of games info: 
 
    console.log(JSON.parse(localStorage.getItem("gamesinfo"))); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="col-lg-3 game"> 
 
    <div class="view view-first"> 
 
    <img src="img/deathstranding.jpg"/> 
 
    <div class="mask"> 
 
    <h2>Death Stranding</h2> 
 
    <p>Death Stranding is an upcoming .....</p> 
 
     i<a href="#" class="info">♥</a> 
 
    </div> 
 
</div>

+0

感謝精心解答Javad。但仍然沒有回答我的問題,我希望這一切都在一個函數中,如果我能夠控制日誌對象並查看屬性,那麼當我返回未定義的函數時如何? – Lucky500

+0

如果你仔細觀察,你已經爲.on點擊定義了另一個函數,並且你只是返回該函數,所以你的getItem函數不會返回任何東西,這就是爲什麼你沒有定義。你應該在返回時檢查最近的函數定義,在你的情況下,你已經定義了它的onclick函數,而不是getItem。希望能幫助到你。 – Javad