2017-05-26 4 views
1

私はいくつかのボタンを持つWebページを持っています。このボタンのいくつか(BA1、BA2 ...と名付けましょう)は、HttpRequestの後に "ELEM_ID"であるページの要素のinnerHtmlプロパティを変更するので、イベントの発生から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> 
... 

EDIT 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

関連する問題