2016-06-24 2 views
0

Я пытаюсь сделать так, чтобы, когда я нажимаю кнопку над элементом часов, который у меня есть, он меняет его с am на pm. У меня много элементов часов, каждый из которых связан с их собственными кнопками am/pm. Вот что я пытался (piechart0 это часы и clock.js где я обрабатывать мои JS для него):Передача идентификатора другого элемента в событие onclick кнопки?

<button class="button2" onclick="Clock.toAm("piechart0")">AM</button> 
<button class="button2" onclick="Clock.toPm("piechart0")">PM</button> 
<canvas id="piechart0" width="200" height="200"></canvas> 

С этим, как мой JavaScript:

Clock.toAm = function(id) { 
    var clock = document.getElementById(id); 
    clock.am = true; 
    for (var j = 0; j < 48; j++) { 
     clock.segments[j] = clock.amSegments[j]; 
     clock.updateDraw(j); 
    } 
} 

Clock.toPm = function(id) { 
    var clock = document.getElementById(id); 
    clock.pm = true; 
    for (var j = 0; j < 48; j++) { 
     clock.segments[j] = clock.pmSegments[j]; 
     clock.updateDraw(j); 
    } 
} 

Но я получаю «атрибут msgstr "уведомление не разрешено здесь. Что я делаю неправильно здесь/как передать другой идентификатор аргументу аргумента onclick кнопки?

EDIT: Я вижу, что у меня могут быть конфликты котировок. Теперь, с помощью «» цитат я получаю ссылку на piechart0, но в то время как фактические переменные piechart0 все определены, когда я закончу:

var clock = document.getElementById(id); 

Все переменные этого элемента не определены. Я не уверен, почему это так, поскольку я использую один и тот же идентификатор?

+1

вы это помечены, как JQuery. Любая причина, по которой вы не используете '$ ('. Class2'). Click()'? – Assimilater

+0

Добавление настраиваемого свойства в элемент HTML (HTMLCanvasElement) не считается хорошей практикой, где вы их определяете? – progysm

+0

Без кавычек, что не работает? Это та же ошибка? – Assimilater

ответ

0

Пара предложений:

Для отладки это я бы вставить console.log(id) и посмотреть, что на самом деле получить до конца. Предполагая, что вы замените несоответствие котировки onclick="Clock.toPm('piechart0')", значение должно пройти через штраф.

Так как вы это помечено как jQuery, я хотел бы использовать .click() то есть что-то вроде:

HTML

<button id="btnPm">PM</button> 

Javascript:

$('button#btnPm').click(function() { Clock.toPm('piechart0'); }); 

Что касается clock.am, я не уверен, если изменить объект DOM, подобный этому, можно заставить работать. Конечно, однако, это было бы обескуражено. Я предложил бы использовать .prop(), т.е. $(clock).prop('am', true)

+0

Это верно при получении идентификатора. Теперь, когда я do: var clock = document.getElementById (id); Все переменные этого элемента не определены. Я не уверен, почему это так, поскольку я использую один и тот же идентификатор, # piechart0? – lgzambello

+0

Вы хотите сказать, что «var clock» не определено? или вы получаете сообщение типа 'toPm, не являющееся членом Clock'? Конкретный поможет вам быстрее ответить – Assimilater

+0

Извините за отсутствие ясности. var clock IS определяется как «canvas # piechart0», но все его переменные не определены. После экземпляра piechart (например) переменная «am» переменной clock = true. с id piechart0 имеет «am = true».Но с var clock, хотя он определен как «canvas # piechart0», все эти переменные не определены, «am = undefined;» – lgzambello

0

Изменения один из двойных кавычек, чтобы быть единственной в OnClick пропа

<button class="button2" onclick='Clock.toAm("piechart0")'>AM</button> 
<button class="button2" onclick='Clock.toPm("piechart0")'>PM</button> 
Смежные вопросы