2016-05-20 10 views
2
var air = ITC.ITC.hotel.options.option[itc].packages.package[i].airfare - 1; 
var opt = ITC.ITC.hotel.options.option[itc].packages.package[i].option - 1; 

console.log((air+1)); // Display 1 in console 
console.log((opt+1)); // Display 7 inconsole 
detailHtml += '<button class="btn btn-primary btn-lg nav-book" type="button" onclick="book_package(\''+ITC.sid+'\' , '+ITC.ITC.hotel.orig_hot_num_xsl+' , \''+(itc+1)+'\' , '+(package_idx+1)+' , '+(air+1)+' , '+(opt+1)+');">'+lang['book']+'</button>'; 

Wenn ich Element kann prüfen, die beiden letzten Parameter der Funktion book_package sind ganze Zahl von 01 und 61, aber als ich Luft + 1 und opt + 1 in der Konsole bekomme ich 1 und 7 ...Javascript Integer als String interpretiert?

<button class="btn btn-primary btn-lg nav-book" type="button" onclick="book_package('3dd57f6c9e133553378e11d7521ab1be1463751663', 1, '1,3', 7, 01, 61);">Book Now</button> 

EDIT 2

ich habe auch versucht

var air = parseInt(ITC.ITC.hotel.options.option[itc].packages.package[i].airfare) - 1; 
var opt = parseInt(ITC.ITC.hotel.options.option[itc].packages.package[i].option) - 1; 

'+(parseInt(air+1))+' , '+(parseInt(opt+1))+' 

ich meine Browser-Cache gelöscht, nur für den Fall, bekomme ich immer noch das gleiche Problem

EDIT 3

New versuchen, immer noch das gleiche Problem ...

'+(1 + parseInt(air , 10))+' , '+(1 + parseInt(opt , 10))+' 
+0

Natürlich ist es. Es ist Javascript –

+0

Was ist Luft und was ist opt? –

+0

Ich habe Luft hinzugefügt und opt in der op – user2942945

Antwort

2

Bei detailHtml += '<button... Sie mit einem String beginnen ... das macht JS alles als String-Verkettung zu interpretieren, während der andere Teile des Codes haben Sie keine Fäden um Dinge durcheinander zu bringen!

Lösung:

detailHtml +=  '<button class="btn btn-primary btn-lg nav-book" type="button" onclick="book_package(\''+ITC.sid+'\' , '+ITC.ITC.hotel.orig_hot_num_xsl+' , \''+parseInt(itc+1)+'\' , '+parseInt(package_idx+1)+' , '+parseInt(air+1)+' , '+parseInt(opt+1)+');">'+lang['book']+'</button>'; 

var a = 1, b = 6; 
 

 
var r = 'Result'; 
 

 
r += ': ' + parseInt(a+1) + ', ' + parseInt(b+1); 
 

 
document.body.innerHTML = r;

+0

Ja, aber der Zusatz ist mit Klammern gemacht. Führt es nicht zuerst, keine Zeichenfolgen also normale Mathematik, dann verketten die Werte? Oder überschreibt das Vorhandensein der ursprünglichen Zeichenfolge das? – ste2425

+0

die Existenz der ursprünglichen Zeichenfolge überschreiben, dass – rafaelcastrocouto

+0

ich nicht spezifisch mit JS gemeint habe, aber mit einfachen Gleichungen dachte ich immer geschweifte Klammern werden zuerst ausgeführt. Hab nur eine schnelle Geige gemacht und dein Recht. Surprised ive musste das nie in der Vergangenheit tun, sondern erst jetzt herausgefunden! – ste2425

0

Machen Sie es sicher durch sicher zu sein, sie sind integer:

air = parseInt(air); 
opt = parseInt(opt); 
+3

[* Geben Sie immer diesen Parameter ('radix') an, um Verwirrung beim Leser zu vermeiden und vorhersehbares Verhalten zu garantieren. Unterschiedliche Implementierungen führen zu unterschiedlichen Ergebnissen, wenn kein Radix angegeben wird. Normalerweise wird der Wert auf 10 gesetzt. *] (Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt). – h2ooooooo

0

Überprüfen Sie Ihre Datentypen für Luft und opt.

Check this out und sehen, wie der erste Alarm Luft als Zahl und die zweite hat es als String hat: plnkr.co/edit/4Ll6juBC3BEu1MgdUhjx?p=preview