Попробуйте это:
<label>How much was your meal?   $
<input type="text" id="cost">
</label>
<p>
<label>How good was the service?  
<input list="rating" placeholder="Choose a rating">
<datalist id="rating">
<option value="1">★</option>
<option value="2">★ ★</option>
<option value="3">★ ★ ★</option>
<option value="4">★ ★ ★ ★</option>
<option value="5">★ ★ ★ ★ ★</option>
</datalist>
</label>
</p>
<input type="button" onclick="pay(percentages);" value="Calculate Tip">
<div id="pay"></div>
<script>
var percentages = [0, 8, 10, 15, 20, 25];
var cost;
var tip;
var i;
(function() {
cost = document.getElementById("cost");
tip = document.getElementById("rating").getElementsByTagName('option');
i = parseInt(tip);
document.getElementById("pay").innerHTML = "Pay $" + pay;
//I'm getting an error here ^^^ and nothing is being output.
//Uncaught TypeError: Cannot set property 'innerHTML' of null
}
function pay(percentages){
percentages.push(percentages[i] * cost * 100);
}
</script>
Закрыл ваш тег <p>
, который не был закрыт. Поместите свой сценарий в конец страницы, чтобы он был более чистым, и поместите свой код в самозапускающуюся функцию, чтобы он ожидал готовности документа перед выполнением.
Ваш pay
, кажется, не установлен, хотя ..