снова js

V
На сайте с 06.11.2008
Offline
18
537

<div id="ch" onclick="alert(this.onclick)">ch</div><br /><br />

<div id="chNew">chNew</div>

<script>

var chk = document.getElementById('ch');

var chkNew = document.getElementById('chNew');

var onNew = function(){alert('onNew')};

chkNew.onclick = chk.onclick;

chk.parentNode.removeChild(chk);

</script>

как присвоить chkNew.onclick не только chk.onclick но еще и onNew???

помогите елы палы пожалуйста, 7 часов уже кручу верчу.

возможно можно обойтись и без того что выше написано, если можно сделать так:

<input type="checkbox" id="ch" />

<script>

document.getElementById('ch').type = "button"; //в ие не работает

</script>

[Удален]
#1

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


chkNew.onclick = function () {

chk.onclick.apply(chkNew);
onNew.apply(chkNew);
}

V
На сайте с 06.11.2008
Offline
18
#2

а второй вариант можно заставить работать?

[Удален]
#3

document.getElementById('ch').setAttribute("type","button");

bearman добавил 25.01.2010 в 07:19

попробуй, может заработает, не разу не пробовал)

если так не заработает, то больше никак :)

V
На сайте с 06.11.2008
Offline
18
#4

я пробывал, не работает

[Удален]
#5

зачит делай как я показал до этого)

V
На сайте с 06.11.2008
Offline
18
#6

ну да, сенкс, позже выложу код той ерунды для которой это все надо

vccv добавил 25.01.2010 в 08:08

function () {

chk.onclick.apply(chkNew);

onNew.apply(chkNew);

}

вот что находится в onclick, это же ссылки, возможно ли запихать сами функции

V
На сайте с 06.11.2008
Offline
18
#7

хотел сделать вид чекбоксов одинаковыми и при этом писать тег как обычно.

проблемы две:

1. так и не получилось копировать onclick,onmouseover и onmouseout

2. не передаются данные не get не post

<form action="" method="get">

<input type="checkbox" name="r1" id="g1" class="myCheckBox" checked="checked" />

<input type="checkbox" name="r2" id="g2" class="myCheckBox" disabled="disabled" />

<input type="checkbox" name="r3" id="g3" class="myCheckBox" />

<input type="submit" value="m get" />

</form>

<style>

.myCheckBox {

margin:0px;

padding:0px;

border:0px;

width:14px;

height:14px;

font-size:0px;}

</style>

<script>

function elemName(id) {return document.getElementsByTagName(id)};

function myCheckBox(path,clss) {

var newOnmouseover = function() {

if (!this.disabled) {

if (this.value=='on') this.style.backgroundImage = 'url('+path+'chekBox_c_o.gif)';

else this.style.backgroundImage = 'url('+path+'chekBox_o.gif)'}}

var newOnmouseout = function() {

if (!this.disabled)

if (this.value=='on') this.style.backgroundImage = 'url('+path+'chekBox_c_e.gif)';

else this.style.backgroundImage = 'url('+path+'chekBox_e.gif)'}

var newOnclick = function() {

if (!this.disabled) {

alert('name='+this.name+'; checked='+this.checked);

if(this.value=='on') {

this.value='';

this.checked = false;

this.style.backgroundImage = 'url('+path+'chekBox_o.gif)'}

else {

this.value='on';

this.checked = true;

this.style.backgroundImage = 'url('+path+'chekBox_c_o.gif)'}}

}

var my = new Object();

for (var i=0;i<elemName('input').length;i++) {

var se = elemName('input').item(i);

if (se.className == clss && se.type == "checkbox") {

my = document.createElement('input');

my.type = 'button';

my.name = se.name;

my.className = se.className;

my.onclick = newOnclick;

my.onmouseover = newOnmouseover;

my.onmouseout = newOnmouseout;

my.id = se.id;

if(se.disabled) {

my.disabled = true;

my.style.backgroundImage = 'url('+path+'chekBox_d.gif)';}

else

if(se.checked) {

my.setAttribute('value','on');

my.value = 'on';

my.checked = true;

my.style.backgroundImage = 'url('+path+'chekBox_c_e.gif)';}

else {

my.value = '';

my.checked = false;

my.style.backgroundImage = 'url('+path+'chekBox_e.gif)';}

se.parentNode.replaceChild(my,elemName('input').item(i));

}

}

}

myCheckBox('/img/','myCheckBox');

</script>

<?=$_GET['r1'];?>

в архиве картинки видов чекбокса оперы

zip img.zip
V
На сайте с 06.11.2008
Offline
18
#8

всеже написал (заменяем checkbox и radio). может кому надо

проблемы по прежнему две:

1. не очень удобно изменять значение атребутов c помощью js

2. в опере при двойном щелчке открывается меню (походу для всех элементов inline)

вот так можно использовать

<style>

/* Js on*/

.operaCheckbRadioJs {

vertical-align:middle;

display:inline-block;

width:14px;

height:14px;}

/* Js off */

.operaCheckbRadio {}

</style>

<form action="" method="get">

1.<input type="checkbox" name="name[]" class="operaCheckbRadio" />

<input type="checkbox" name="name[]" class="operaCheckbRadio" /><br /><br />

2.<input type="radio" name="name2" class="operaCheckbRadio" />

<input type="radio" name="name2" class="operaCheckbRadio" checked="checked" />

disabled( <input type="radio" name="name2" class="operaCheckbRadio" disabled="disabled" id = "disabled" /> )

<input type="radio" name="name2" class="operaCheckbRadio" /><br /><br />

3.<input type="radio" name="name3" class="operaCheckbRadio" />

<input type="radio" name="name3" class="operaCheckbRadio" />

<input type="button" onclick="enabled('disabled')" value="enabled('disabled')" /><br /><br />

<input type="submit" value="Отправить" />

</form>

<script type="text/javascript" src="/myCheckbRadio.js"></script>

<script>

myCheckbRadio("/CheckbRadio/","operaCheckbRadio");

function enabled(id) {

document.getElementById(id).disabled = false;

document.getElementById(id).parentNode.onmouseout();

}

</script>

<?

$name = $_GET['name']?$_GET['name']:array();

echo '1.';

foreach($name as $k=>$v) echo 'k = '.$k.', v='.$v.';';

echo '<br />';

echo '<br />2.'.$_GET['name2'].'<br />';

echo '<br />3.'.$_GET['name3'].'<br />';

?>

сам код:


function myCheckbRadio(path,clss) {

// кешируем иконки
var newImg = Array(12);
for (var i=0;i<newImg.length;i++) {
newImg = new Image();
newImg.src = path+'CheckbRadio'+i+'.gif';}

function UpCheckbRadio (Obj,e) {
var first = Obj.firstChild;
var imgpath;
var chd = function (iObj,p1,p2,p3,p4) {return 'url('+newImg[iObj.checked?(iObj.disabled?p1:p2):(iObj.disabled?p3:p4)].src+')'}

if(first.type == 'checkbox') {
if (e == 'click') first.checked = first.disabled?first.checked:!first.checked;
imgpath = e!='out'?chd(first,5,4,2,1):chd(first,5,3,2,0);
Obj.style.backgroundImage = imgpath;}
else
if (e == 'click') {
if (!first.disabled && !first.checked) {
for (var i=0;i<document.getElementsByTagName('input').length;i++){
var se = document.getElementsByTagName('input').item(i);
if (se.type == first.type && se.name == first.name && se.className == first.className)
if(se != first) {
se.checked = false;
se.parentNode.style.backgroundImage = chd(se,'','',8,6)}
else {
first.checked = true;
imgpath = 'url('+newImg[10].src+')';
Obj.style.backgroundImage = imgpath;}
}
}
}
else {
imgpath = e!='out'?chd(first,11,10,8,7):chd(first,11,9,8,6);
Obj.style.backgroundImage = imgpath;}
}

for (var i=0;i<document.getElementsByTagName('input').length;i++) {
var pse = document.getElementsByTagName('input').item(i);

if ((pse.type == "checkbox" || pse.type == "radio") && pse.className == clss) {
pse.style.display = 'none';
var newCheckbRadio = document.createElement('span');
newCheckbRadio.className = clss+'Js';
newCheckbRadio.id = pse.id?newCheckbRadio.className+pse.id:'';

pse.parentNode.insertBefore(newCheckbRadio,pse);
newCheckbRadio.appendChild(pse);

UpCheckbRadio(newCheckbRadio,'out');

newCheckbRadio.onclick = function () {
if(this.firstChild.onclick != null) this.firstChild.onclick();
UpCheckbRadio(this,'click')}
newCheckbRadio.onmouseover = function () {
if(this.firstChild.onmouseover != null) this.firstChild.onmouseover();
UpCheckbRadio(this,'over')}
newCheckbRadio.onmouseout = function () {
if(this.firstChild.onmouseout != null) this.firstChild.onmouseout();
UpCheckbRadio(this,'out')}
} } }

и картинки из оперы )

zip CheckbRadio.zip
zip myCheckbRadio.js.zip

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий