2017-05-26 128 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