2017-05-26 153 views
1

我有一個帶有幾個按鈕的網頁。其中一些按鈕(讓我們將它們命名爲BA1,BA2 ...)在HttpRequest之後修改頁面元素的innerHtml屬性,該ID爲「ELEM_ID」,因此從事件觸發到修改ELEM_ID的innerHtml屬性。JavaScript:觸發事件恢復innerHtml屬性

當瀏覽器加載頁面,ELEM_ID有其innerHTML的默認值,我們稱之爲價值「VALUE_1」:

<p id="ELEM_ID">VALUE_1</p>

當我按下按鈕BA1

,經過一段時間後,該值更改爲「VALUE_2」

<p id="ELEM_ID">VALUE_2</p>

的問題是,當我按下按鈕BA2,正如我按下它,ELEM_ID.innerHtml的價值回來VALUE_1當HTM lResponse已準備就緒,它的值已更改爲VALUE_3。 它爲什麼會發生?

這部分代碼:

var additional_order = [[false,'VAR_1'],[false,'VAR_2'],[false,'VAR_3'],[false,'4'],[false,'VAR_5'],[false,'VAR_6']]; 
var names = []; 
var labelA = "cor_price_visible_"; 
var labelB = "cor_price_"; 
names.push("name1"); 
names.push("name2"); 
names.push("name3"); 
names.push("name4"); 

function updatePrice(n) { 
    additional_order[n][0]=!additional_order[n][0]; 
    var request = "SSID=364c59b135c011c0734893225ab8a8a9"; 

    for (i = 0; i<additional_order.length;i++) { 
     if (additional_order[i][0]) { 
      request=request+"&"; 
      request=request+additional_order[i][1]+'=YES'; 
     } 
    } 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
       result = JSON.parse(this.responseText); 
      for (i=0;i<result.length;i++) { 
       document.getElementById(labelA+names[i]).innerHTML=""+(result[i].toFixed(2)); 
       document.getElementById(labelA+names[i]).value=(result[i].toFixed(2)); 
      } 
     } 
    } 

    xhttp.open("POST","services/livepriceservice.php/",true); 
    xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    xhttp.send(request); 

} 


<button id="BA1" onclick="updatePrice(1)">Press Me!(1)</button> 
<button id="BA2" onclick="updatePrice(2)">Press Me!(2)</button> 
... 

編輯1: 調試,我注意到這個問題的原因是該腳本的jquery.js的東西執行(也就是恢復功能節點屬性的默認值),但沒有任何顯式調用。

EDIT 2:功能:

html: function(a) { 
     return S(this, function(a) { 
      var b = this[0] || {} 
       , c = 0 
       , d = this.length; 
      if (void 0 === a && 1 === b.nodeType) 
       return b.innerHTML; 
      if ("string" == typeof a && !za.test(a) && !la[(ja.exec(a) || ["", ""])[1].toLowerCase()]) { 
       a = r.htmlPrefilter(a); 
       try { 
        for (; c < d; c++) 
         b = this[c] || {}, 
         1 === b.nodeType && (r.cleanData(ma(b, !1)), 
         b.innerHTML = a); 
        b = 0 
       } catch (e) {} 
      } 
      b && this.empty().append(a) 
     }, null, a, arguments.length) 
    } 
+0

嗨,你有什麼活的例子嗎? – DanilGholtsman

+0

嘗試逐步調試究竟發生了什麼,你的'BA2'點擊 – DanilGholtsman

+0

@DanilGholtsman調試我注意到問題的原因是在jquery.js腳本中執行某些東西(有一個函數可以恢復默認值節點的屬性),但沒有明確的調用。 – user3415993

回答

1

嘗試調試DOM變化和取得的子樹斷點,或屬性的變化。

Chrome Dev tools

+0

哦,這是一個很好的建議! – DanilGholtsman

+0

這就是我已經做的^^ ...元素被jquery.js的函數修改,我正在修改這個問題來寫下這個函數。 – user3415993