2014-09-10 4 views
-1
function Popup() { 

} 

Popup.prototype.openPopup = function() { 
    var div = document.getElementById("test"); 
    div.style.display = 'block'; 
     }; 

Popup.prototype.closePopup = function() { 
var div = document.getElementById("test"); 
div.style.display = 'none'; 
}; 


window.onload = function() { 
    var popup = new Popup(); 

    var opnpopup = document.getElementsByClassName('clck'); 
    opnpopup.addEventListener('click', function() { 
     popup.openPopup(); 
    }); 

    var cnclpopup = document.getElementById('cancel'); 
    cnclpopup.addEventListener('click', function() { 
     popup.closePopup(); 
    }); 


} 

HTML код:Чтобы получить доступ к атрибуту класса с помощью Prototype JS

<button id="clck" class="clck">click here</button> 
<div id="test" class="popup"> 
    This is a test message 
    <div id="cancel" class="cancel" ></div> 
</div> 

В выше JS, когда я доступ к имени класса 'clck' с помощью document.getElementsByClassName('clck') не отображается всплывающее окно, но когда мы к нему доступ через «ид» то это работает .. Так что проблема, пожалуйста, объясните

+1

Вы уверены, что используете PrototypeJS? Это библиотека, которая, как и jQuery, использует сокращение $() среди множества других вещей. Я считаю, что вы просто используете встроенное свойство javascript 'prototype', которое отличается от фактической библиотеки –

+1

возможным дублированием [Почему getElementsByClassName не работает для меня? Что он возвращает?] (Http://stackoverflow.com/questions/10693845/why-getelementsbyclassname-does-not-work-for-me-what-does-it-return) –

+0

Но можете ли вы сказать мне, когда я использую document.getElementsByClassName ('CLCK'); он не работает вместо этого, если я использую document.getElementById ('clck'); то его работа. – Tushky

ответ

0

getElementsByClassName возвращает объект, похожий на массив. Проверьте это здесь: getElementsByClassName

"Returns an array-like object of all child elements which have all of the given class names."

opnpopup представляет собой массив, содержащий все элементы с классом clck. Вы не можете привязывать события к массивам.

window.onload = function() { 
    var popup = new Popup(); 

    var opnpopup = document.getElementsByClassName('clck'); 

    for (index = 0; index < opnpopup.length; index++) 
     opnpopup[ index ].addEventListener('click', function() { 
     popup.openPopup(); 
     }); 

    var cnclpopup = document.getElementById('cancel'); 
    cnclpopup.addEventListener('click', function() { 
     popup.closePopup(); 
    }); 
} 

Этот код должен работать, поэтому вы привязываете событие click ко всем элементам этого массива.

+0

Спасибо за решение. но напишите, что происходит во всплывающем окне, но когда я нажимаю кнопку отмены, всплывающее окно не закрывается. – Tushky

+0

Получаете ли вы какие-либо ошибки в консоли разработчика? – TheFrozenOne

+0

Да, я получил TypeError: opnpopup [index] .addEventListener не является функцией. – Tushky

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