2013-10-05 2 views
0

Я пытаюсь отключить функцию, когда выбрана опция drop down, но я не хочу иметь встроенный JavaScript в HTML. По какой-то причине, когда я запускаю скрипт, изменение/клик регистрируется автоматически. Зачем?On-change/click firing, даже если никаких изменений не было сделано

JSFiddle: http://jsfiddle.net/nysteve/QHumL/22/

var time = new Date(); 
var timestamp = time.toString("hh:mm:ss"); 

//create color from time stamp and print within div 
function timeToHexColor(){ 
    var showlist = document.getElementById("board").innerHTML += 
        "#" + timestamp.split(":").join("") + "<br/>"; 
} 

//Print colors based on time interval 
function Colors(interval) { 
    this.interval = interval; 
    switch (this.interval) { 
     case 'second': 
      x = setInterval(timeToHexColor,1000); 
      setTimeout(stopColors, 5000); 
      break; 
     case 'minute': 
      x = setInterval(timeToHexColor,60000); 
      setTimeout(stopColors, 5000); 
      break;  
     case 'hour': 
      x = setInterval(timeToHexColor,60000*60); 
      setTimeout(stopColors, 5000); 
      break; 
     case 'day': 
      x = setInterval(timeToHexColor,60000*1440); 
      setTimeout(stopColors, 5000); 
      break; 
     default: 
    } 
} 

//For demo purposes manually kill priting after 5 seconds 
function stopColors() { 
    clearInterval(x); 
} 

//Activate printing by selecting an option. 
function generateColors(interval){ 
    document.getElementById("options").onclick = Colors(interval); 
    /*same result with onchange 
    I even sent the JSFiddle settings per this link: 
     http://bit.ly/1gev7zR*/ 
} 

generateColors('second'); 
+1

Это дубликат http://stackoverflow.com/questions/3249128/javascript-event-handler-arguments => см. ответы там для вашей проблемы. – Jealie

ответ

1

Вы не можете прикреплять слушатель события, как, что, что вызывает Colors функционировать сразу.

Вы можете обернуть его в функции или вы можете использовать addEventListener,

function generateColors(interval){ 
    document.getElementById("options").onclick = function() { 
     Colors(interval); 
    } 
} 

Второй метод,

function generateColors(interval) { 
    var el = document.getElementById("options"); 
    el.addEventListener("click", function() { 
     Colors(interval); 
    }); 
} 

Updated DEMO

+1

Все еще путается, почему он срабатывает мгновенно; Я использую метод onclick not click. Независимо от того, используется метод jQuery, упомянутый в качестве ответа в ссылке, размещенной Jealie: $ («target»). Change (function() {myfunction();}); Все еще новичок в JS, но не является ответом jQuery, по сути делающим то же самое, что и ваш собственный ответ - создание анонимной функции для существующего изменения прослушивателя событий? Я предполагаю, что jQuery сохраняет запись всего этого кода. Спасибо за этот ответ, хотя! =) – brooklynsweb

+2

@brooklynsweb: 'element.onclick' ожидает обработчик функции, а не значение функции. Итак, 'element.onclick = myfunction;' работает так, как ожидалось, и не вызывает вызов myfunction() при установке, но 'element.onclick = myfunction();' вычисляет значение, возвращаемое myfunction, в параметре element.onclick. – Jealie

Смежные вопросы

 Смежные вопросы