2016-12-05 50 views
0

我有一個看似簡單的JavaScript函數我試圖創建一個元素的值檢查innerHTML並吐出一個基於答案的值,但對於我不能讓它工作,不會有任何錯誤。此功能由onclick事件觸發,不需要添加window.onload。任何人都可以給我的洞察力將非常感謝!這是我的HTMLJavascript簡單,否則innerHTML =='東西'不工作

<div class="col-md-8 col-xs-9 product-info"> 
    <p id="planTitle" class="bold m-b-2">20 DAY SUPPLY // 40 CAPSULES // FMF</p> 
    <p>Price: <span class="pull-right" id="plan-amount">$79</span></p> 
    <p>Tax: <span class="pull-right">Included</span></p> 
    <p id="shipping-line">Shipping: <span class="pull-right" id="cart-shipping-cost">$9.99</span></p> 
    <p class="hidden">Coupon: <span class="pull-right" id="coupon-code">firstmonthfree20day</span></p> 
</div> 

而且我的JavaScript

function updateShippingCost(country_region) { 
    var url; 

    var kkdk = ''; 
    var planTitleesd = document.getElementById('planTitle').innerHTML; 
    console.log(planTitleesd); 
    if (planTitleesd == '10 Day Supply // 20 Capsules // FMF') { 
     kkdk = '5.99'; 
     console.log(kkdk); 
    } else if (planTitleesd == '20 Day Supply // 40 Capsules // FMF') { 
     kkdk = '9.99'; 
     console.log(kkdk); 
    } else if (planTitleesd == '30 Day Supply // 60 Capsules // FMF') { 
     kkdk = '14.99'; 
     console.log(kkdk); 
    } 
} 

奇怪的是,執行console.log(planTitleesd)返回一個值,如 「20天的供應// 40個//膠囊FMF」 但所有其他console.log(kkdk)不。謝謝你的幫助!

+5

那麼,什麼** **究竟這是否'的console.log(planTitleesd)'返回? –

+0

也發佈您的標記。看看[mcve]。 – CollinD

+1

'console.log(planTitleesd)返回一個值,但所有其他人不'這表明它不會通過任何'if's – vlaz

回答

1

我已經用相關的HTML更新了原始問題,對此抱歉。

您正在做一個區分大小寫的比較。你已經指出,結果值是全部大寫,而你將它與Title Case進行比較。考慮通過在比較之前在兩個操作數上調用toLowerCase來進行無情的比較。另外,請實際發佈您的標記。故障診斷代碼問題必須包含一個MCVE。 - CollinD 9分鐘前

這是我正在尋找的簡單問題的簡單答案 - 感謝CollinD!

0

幾乎可以肯定你在planTitleesd的開始/結束處有換行符。 嘗試用console.log('>' + planTitleesd + '<');代替console.log(planTitleesd);來檢查。

下面是一個例子: https://jsfiddle.net/324aw9zz/1/

你應該避免任何空格標籤首戰之間/換行/越走越文本本身:中

<th id=planTitle>lala</th> 

代替

<th id=planTitle> 
    lala 
    </th> 
0

爲什麼不要做更多的事情: 使用.indexOf()檢查一個(或多個)字符串?

function updateShippingCost(country_region) { 
    var url; 

    var kkdk = ''; 
    var planTitleesd = document.getElementById('planTitle').innerHTML; 

    if (planTitleesd.indexOf('10 Day') > -1 && planTitleesd.indexOf('20 Capsules') > -1) { 
     kkdk = '5.99'; 
    } else if (planTitleesd.indexOf('20 Day')) { 
     kkdk = '9.99'; 
    } else if (planTitleesd.indexOf('30 Day')) { 
     kkdk = '14.99'; 
    } 
} 

我也同意你應該刪除區分大小寫的字符串,因爲(再次),可能會發生錯別字等。

機會只是在值的錯字,或者您可能正在查看一個空的返回/換行符。 確保所有回車和更多都從響應中刪除。看到,有些項目實際上可能會添加一個你沒有注意到的項目。 (如公開標籤的div)

聽起來像這個應用程序是一個商店,可能會變得非常大。我會建議可能是返回你需要的結果的對象。

下面的一個JSFiddle,我覺得如果你可以創建一個合適的JSON對象,會簡化你的過程。 https://jsfiddle.net/0sscf798/

function updateShippingCost(country_region) { 
     var url; 
     var kkdk = ''; 
     var planTitleArr = []; 
     var planTitleObj = {}; 
     var planTitleesd = document.getElementById('planTitle').innerHTML; 

     // This would most likely be a JSON response of items from the page/category 
     planTitleObj = { 
      "10 Day Supply": { 
       "20 Capsules": { 
       "FMF": 1.23 
       } 
      }, 
      "20 Day Supply": { 
       "20 Capsules": { 
       "FMF": 4.56 
       } 
      } 
      }; 

     planTitleArr = planTitleesd.split(" // "); 
     var price = planTitleObj[planTitleArr[0]][planTitleArr[1]][planTitleArr[2]] || "There is a problem with the price." 

     alert("The Price is: " + price); 
} 
updateShippingCost('');