Динамическая проблема JavaScript на клике - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь дать кнопке событие onclick при изменении определенной вещи на странице.Я пытался сделать это разными способами, и ни один из них не сработал.Что я делаю не так?

Вот что я пробовал.

document.getElementById(subDiv).onclick = function() { alert('Error. There is an error on the the page. Please correct that then submit the page'); };


document.getElementById(subDiv).onclick = "alert('Error. There is an error on the the page. Please correct that then submit the page');";


function redErrorAlert()
{
    alert('Error. There is an error on the the page. Please correct that then submit the page');
}
document.getElementById(subDiv).onclick = redErrorAlert;



document.getElementById(subDiv).setAttribute('onclick',redErrorAlert(), false);



document.getElementById(subDiv).setAttribute('onclick','redErrorAlert()', false);

Примечание: subDiv - это переменная, содержащая идентификатор элемента.

Ответы [ 4 ]

2 голосов
/ 07 июля 2010

Вам нужно дождаться создания дерева DOM, прежде чем выполнять запросы к нему.

Убедитесь, что все это происходит в контексте, который создается после дерева DOM.было построено:

window.onload = function() {
    document.getElementById(subDiv).onclick = function() { alert('Error. There is an error on the the page. Please correct that then submit the page'); };
};
1 голос
/ 07 июля 2010

document.getElementById () принимает строку, содержащую идентификатор элемента, который вы пытаетесь найти.Предполагая, что вы ищете элемент с идентификатором 'subDiv', вы должны вызывать document.getElementById ('subDiv').

(также возможно, что переменная subDiv в вашем коде является строкой, содержащей идентификатор, но так как вы не упомянули об этом, я предполагаю, что это не так.)

РЕДАКТИРОВАТЬ: Если бы вы согласились с предложением virstulte использовать jQuery, вы бы прикрепилифункция для события document.ready, чтобы гарантировать, что DOM был построен к тому времени, когда ваш код выполняется.Пример:

$(document).ready(function() {
    $("#subDiv").click(function() { alert("Test!"); });
});
0 голосов
/ 07 июля 2010

1001 * попробовать *

document.getElementById(subDiv).onclick = alert('Error. There is an error on the the page. Please correct that then submit the page');

или

function redAlert() {
    alert('Error. There is an error on the the page. Please correct that then submit the page');
}

document.getElementById(subDiv).onclick = redAlert();

Первый случай: вам нужно вызвать функцию, и вы присвоили строку

Второй случай: вы назначили функцию и не вызывали эту функцию

0 голосов
/ 07 июля 2010

Здесь звучит как территория jQuery. После того, как вы изучите все тонкости jQuery, такие вещи очень легко решить, и вы обнаружите, что пишете намного меньше JavaScript.

Во-первых, получите jQuery от http://jquery.com/

Затем вставьте это в свой код, чтобы связать событие:

$('#idOfElementToBindClickEvent').click(function(){
  alert('Error.');
});

jQuery в основном предоставляет способ манипулировать элементами с помощью CSS-подобных селекторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...