Jump to content
  • 0

Плагин для Радиобаттона...


Yamaradg
 Share

Question

Всем привет.

При конструировании плагина для радиобаттона столкнулся с трудностью того, что во время нажатия на сам радиобаттон у меня в блоке с виртуальным баттоном(<i id="virtual_radio">) не срабатывает появление необходимой картинки?

При клике по <i id="virtual_radio"> всё происходит так как и задумано!?

Не пойму в чём причина?

js код следующий:

var myRadio = document.getElementById('myRadio');

var virtualRadio = document.getElementById('virtual_radio');

virtualRadio.onclick = function(){

if (myRadio.checked == false) {

myRadio.checked = true;

virtualRadio.style.backgroundImage='url(images/checked.png)';

}

};

myRadio.onclick = function(){

if (myRadio.checked == false) {

myRadio.checked = true;

virtualRadio.style.backgroundImage='url(images/checked.png)';

}

};

P.S. Cсылка на страницу с плагином находится здесь:

http://yamaradg.narod2.ru/history/check_2/index.html

Буду очень признателен за помощь...

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

не понимаю что именно вы хотите добиться своим кодом, но обычно пытаются добиться что-то вроде этого:


<style>
.radio{width:10px;height:10px;border:1px solid #bbb;background:#d00;}
</style>
<script>
function radio(obj)
{
var id = obj.id;
var input = document.getElementById(id.substr(1));
if(!input.checked)
{
obj.style.background = '#0d0';
input.checked = 'checked';
}
else
{
obj.style.background = '#d00';
input.checked = '';
}
}
</script>
<input type="radio" id="radio_1">
<div class="radio" id="_radio_1" onclick="radio(this);"></div>

  • Like 1
Link to comment
Share on other sites

  • 0

не понимаю что именно вы хотите добиться своим кодом, но обычно пытаются добиться что-то вроде этого:

Хотел добиться того что бы 'галочка' появлялась не только при клике по тегу <i>, а также при клике по самому инпуту и тегу <label>

Link to comment
Share on other sites

  • 0

Не очень разбираюсь в скриптах, но авось помогу....

Убрать .onclick, оставте просто


var virtualRadio = document.getElementById('virtual_radio');
var myRadio = document.getElementById('myRadio');
if (myRadio.checked == false) {
myRadio.checked = true;
virtualRadio.style.backgroundImage='url(images/checked.png)';
}

...вариант?

Edited by alexandr_v-vich
  • Like 1
Link to comment
Share on other sites

  • 0

ну тогда можно сделать так


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="keywords" content="">

<title>Test</title>
<style>
*{margin:0px;padding:0px;}
html,body{height:100%;}
.radio{display:inline-block;width:10px;height:10px;border:1px solid #bbb;background:#d00;}
</style>
<script>
function radio(input)
{
var id = input.id;
var obj = document.getElementById('_'+id);
if(input.checked)
{
obj.style.background = '#0d0';
}
}
</script>
</head>
<body>
<label>
<div class="radio" id="_radio_1"></div>
<input type="radio" name="radio" id="radio_1" onclick="radio(this);">
пункт радио
</label>
</body>
</html>

  • Like 1
Link to comment
Share on other sites

  • 0

Только, что-то намудрил я...по-моему как-то так


var virtualRadio = document.getElementById('virtual_radio');
var myRadio = document.getElementById('myRadio');
if (myRadio.checked) {
virtualRadio.style.backgroundImage='url(images/checked.png)';
}

Switch74, Аха, да и вот и я про....опередили меня))

Edited by alexandr_v-vich
  • Like 1
Link to comment
Share on other sites

  • 0

я так понимаю ты очень хочешь, чтобы данная реализация работала и в ie и в лисе

попробуй так


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="keywords" content="">

<title>Test</title>
<style>
*{margin:0px;padding:0px;}
html,body{height:100%;}
.radio{display:inline-block;width:10px;height:10px;border:1px solid #bbb;background:#d00;}
</style>
<script>
function radio(elem)
{
var id = elem.id;
var input = document.getElementById(id+'_');
var obj = document.getElementById('_'+id);
if(input.checked)
{
obj.style.background = '#0d0';
}
}
</script>
</head>
<body>
<label id="radio_1" onclick="radio(this);">
<div class="radio" id="_radio_1"></div>
<input type="radio" name="radio" id="radio_1_">
пункт радио
</label>
</body>
</html>

но есть одно но, в некоторых браузерах чекед стоит по умолчанию и его не снять + если ты будешь делать список переключателей, то тебе нужно будет сделать функцию их обнуления

  • Like 1
Link to comment
Share on other sites

  • 0

Небольшой вопрос. Зачем в label всё запихивать, с таким же успехом любой другой тег проканает, почему не


<label for="button" bla="blabla" onbla="blabla(blabl);">пункт радио</label>
<button`ы>

?

Edited by alexandr_v-vich
Link to comment
Share on other sites

  • 0

Вариант Switch74 работает?

Ещё не пробовал...

+ Хотелось бы все таки не брать чужие идеи, а понять почему не работает именно мой вариант...

Небольшой вопрос. Зачем в label всё запихивать, с таким же успехом любой другой тег проканает, почему не


<label bla="blabla" onbla="blabla(blabl);">пункт радио</label>
<button`ы>

?

Да это я ради эксперемента попробовать решил.

Но вообще для меня такая конструкция не принципиальна..

Link to comment
Share on other sites

  • 0

Просто у вас стоит label с обращением к своему содержимому. Может и непринципиально...но проблема всегда в деталях, да и углядеть её с правильной семантикой проще..

Link to comment
Share on other sites

  • 0

я так понимаю ты очень хочешь, чтобы данная реализация работала и в ie и в лисе

попробуй так

но есть одно но, в некоторых браузерах чекед стоит по умолчанию и его не снять + если ты будешь делать список переключателей, то тебе нужно будет сделать функцию их обнуления

Вы правы. Мне действительно необходима полная поддержка всех современных браузеров кроме IE-6.

Обнуление обычно решаю через

window.onload=function() {}

P.S. Спасибо за помощь.

Если не смогу адаптировать к норме свою конструкцию - то тогда возьму себе на вооружение вашу...

Edited by Yamaradg
Link to comment
Share on other sites

  • 0

label вообще во всех браузерах должен бы работать, но почему-то у мя в последнем фаере и ie7 не работает.

Если все вешать на js то можно label поменять на что угодно - это не принципиально, главное оставить input, остальное можно менять. В jquery все вышло бы куда проще.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy