2013-02-26 5 views
32

Это моя функция, и она должна изменить атрибут OnClick на входе HTML, но если я используюИзменить OnClick атрибут с JavaScript

document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 

он не работает, но если я использую

document.getElementById('buttonLED'+id).onclick = writeLED(1,1); 

Функция выполняется сама по себе! Любые идеи, какой код я должен использовать для изменения атрибута onCLick БЕЗ выполнения функции до нажатия кнопки?
Вот полная функция, если она имеет значение:

function showLED(id){ 
    if(color == 0){ 
     document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 
     document.getElementById('buttonLED'+id).value="light is on"; 
     //document.getElementById('buttonLED'+id).disabled = false; 
    }else{ 
     document.getElementById('buttonLED'+id).onclick = "writeLED(1,0)"; 
     document.getElementById('buttonLED'+id).value="light is off"; 
     //document.getElementById('buttonLED'+id).disabled = false; 
    } 
} 
+3

'document.getElementById ('buttonLED' + идентификатор) .onclick = "writeLED (1,1)";' является установив свойство 'onclick' элемента в строку. – crush

+2

'document.getElementById ('buttonLED' + id) .onclick = writeLED (1,1);' устанавливает свойство 'onclick' элемента в результат' writeLED (1,1) ' – crush

+0

Возможный дубликат [ Измените действие onclick с помощью функции Javascript] (http: // stackoverflow.com/questions/5303899/change-onclick-action-with-a-javascript-function) – Vadzim

ответ

43

Вы хотите сделать это - установить функцию, которая будет выполняться в ответ на событие OnClick:

document.getElementById('buttonLED'+id).onclick = function(){ writeLED(1,1); } ; 

Вещи вы находитесь делать не работают, потому что:

  1. OnClick обработчик событий ожидает иметь функцию, здесь вы назначаете строку

    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)"; 
    
  2. В этом, вы назначаете как OnClick обработчик события результат выполнения функции, на writeLED (1,1):

    document.getElementById('buttonLED'+id).onclick = writeLED(1,1); 
    
+2

+1 «когда у вас есть проблема - добавьте еще один слой абстракции» - classic :) – alfasin

+0

Отлично работает, я просто положил его и работая отлично, спасибо! – shiro

+2

О, я ненавижу это. Если вы проверите элемент buttonLED, вы увидите, что атрибут onclick не задан, он создает эфемерный обработчик событий, который вы не сможете увидеть в источнике. Ответ Marcelo Teixeira Ruggeri ниже на самом деле устанавливает атрибут onclick, что и задал оригинальный вопрос. Я не буду ссылаться на этот ответ, потому что он работает и был принят, но для меня он наверняка воняет. –

0

Вы фактически не изменяя функции.

onClick присваивается функции (которая в данном случае является ссылкой на что-то, указателем функции). Значения, переданные ему, не имеют значения, и не может использовать любым способом.

Другой проблемой является ваша переменная color кажется из ниоткуда.

В идеале, внутри функции вы должны поставить эту логику и дать понять, что писать. (Вкл/выкл и т.д. и т.п.)

52

Ну, просто сделать это и ваша проблема решена:

document.getElementById('buttonLED'+id).setAttribute('onclick','writeLED(1,1)') 

иметь хороший день XD

+1

thnx много. это именно то поведение, которое я хотел. – Rusty

+1

Это похоже на ответ на фактический вопрос, а не просто на клочок, чтобы что-то работать. –

3

Линия onclick = writeLED(1,1) означает, что вы хотите немедленно выполнить функция writeLED (arg1, arg2) с аргументами 1, 1 и назначить возвращаемое значение; вам нужно вместо этого создать функцию, которая будет выполняться с этими аргументами и назначить ее. Верхний ответ дал один пример - другой, чтобы использовать функцию связывания() следующим образом:

var writeLEDWithSpecifiedArguments = writeLED.bind(this, 1,1); 
    document.getElementById('buttonLED'+id).onclick = writeLEDWithSpecifiedArguments; 
Смежные вопросы