1) Во-первых, вам не хватает фигурной скобки для завершения темы функции (). Я предполагаю, что вам не нужна переменная options внутри функции темы.
function topic() {
//if id="temperature" set var topic to "//////temperature"
if (document.getElementById("temperature").checked == true) {
document.getElementById("temperature").checked;
topic = "//////temperature"
}
} // <<- ADD THIS HERE
2) То, что вы не показываете, это операторы, где вы подключаетесь к серверу MQTT и где создается объект client . Функции, встроенные в переменную options, являются обратными вызовами для этих операторов. Это важно из-за последовательности событий. В зависимости от того, когда вы подключаетесь, тема может или не может быть определена. Это не ясно из вашего кода. Например, где находятся:
client = new Paho.MQTT.Client(MQTT_ADDRESS, MQTT_PORT, MQTT_CLIENT_ID);
client.connect(options);
3) Вы также можете проверить значение темы перед подпиской, если она пуста:
if (topic !== '') client.subscribe(topic);
Надеюсь, это поможет.