プロが教える店舗&オフィスのセキュリティ対策術

プログラム初心者です。
下記のようなjavascript(Ajax)を作りました。
forなどで、もう少しシンプルに書く方法はありますか?

var check = ['link0', '#link1','#link2'];

$(check[0]).click(function () {
処理A
});

$(check[1]).click(function () {
処理A
});

$(check[2]).click(function () {
処理A
});

※処理Aは同じ処理

どうぞ宜しくお願い致します。

A 回答 (4件)

forの場合


for (key in check) {
$(check[key]).click ( function() {
if(this.checked) {
thwrite();
} else {
thremove();
}

for (key in check) {
if ($(check[key]).attr('id') == this.id) {
$(".cell"+key).toggle(this.checked);
}
}
});
}

eachの場合
$.each(check, function(x,y){
$(y).click(function (){
if(this.checked) {
thwrite();
} else {
thremove();
}
$(".cell"+x).toggle(this.checked);
})
});
    • good
    • 0
この回答へのお礼

遅くなってしまい、申し訳ございません。
丁寧に教えてくださってありがとうございました!

お礼日時:2013/09/26 22:10

jQueryの引数(セレクタ)はCSSセレクタのルールに準拠しているので、こういう書き方はできませんか?



var check = ['#link0', '#link1','#link2'];

$(check.join(',')).click(function(){
処理A
});

未検証です。


>No.1補足
処理内容が違ってれば、別々に書かなきゃ無理ですね。
一定のルールがあれば、そのルールをプログラムに書き直せば良いですが。

この回答への補足

ご回答有難うございます。
.joinというものもあるんですね!勉強します。
大変便利なので、他のシーンがあった時、是非活用させていただきます。
no.2のLancerVIIさんの書き込みにコードを補足させて頂きましたので、
お手隙の時にでもどうぞ宜しくお願い致します。

補足日時:2013/04/09 11:12
    • good
    • 0

こんにちは。



何かちょっとしたミスがありませんかね。
私の環境では動きましたよ。

$(check[i]).click ( function() {
$(".cell"+i).toggle(this.checked);
});
};
だとclass="cell0",class="cell1"とか付けないといけないので個人的にはおすすめしません。

jQueryのセレクタは柔軟に対応できるのでいろいろなアクセス方法があります。
現在のHTMLの構成と、やりたいことがわかればもうちょっとアドバイス出来ると思います。

この回答への補足

こんにちは。2度目のご回答ありがとうございます。

>class="cell0",class="cell1"とか付けないといけないので
こちらは、後ほど.eachと.addClassを使って設定しようと思っておりました。

簡単に、コードを補足します。
ネットから切り貼りしたド素人製でお恥ずかしい限りなのですが、
何卒宜しくお願い致します。
イメージは、エクセルの上の部分です。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>アルファベット順のテーブルのテスト</title>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script>
<!--
var alfa = ['A', 'B','C'];
var check = ['#link0', '#link1','#link2'];
$(document).ready(function(){
function thwrite() {
var thcnt =$('th').size();
$("table#sample tr:nth-child(1)").append("<th>" + alfa[thcnt] + "</th>");
};
function thremove() { $('th:last').remove() ;}

//試したコード
//for ( var i = 0; i < check.legnth; i ++ ) {
//$(check[i]).click ( function() {
//if( this.checked ) {
//thwrite();
//} else {
//thremove()
//}
//$(".cell"+i).toggle(this.checked);
//});
//};

//繰り返し出来そうな箇所
$( check[0] ).click(function () {
if( this.checked ) {
thwrite();
} else {
thremove()
}
$(".cell0").toggle(this.checked);
});

$( check[1] ).click(function () {
if( this.checked ) {
thwrite();
} else {
thremove()
}
$(".cell1").toggle(this.checked);
});

$( check[2] ).click(function () {
if( this.checked ) {
thwrite();
} else {
thremove()
}
$(".cell2").toggle(this.checked);
});
});
// -->
</script>
<style>
<!--
table {
font-size:12px;
border:1px solid #afcbef;
border-collapse:collapse;
border-spacing:0;
}
table span {
font-size:10px;
}

th {
width:80px;
background:#d3dce9;
text-align:center;
padding:5px;
border:1px solid #afcbef;
}
td {
text-align:center;
border:1px solid #afcbef;
display:none;
}
-->
</style>
</head>
<body>

<form name="chbox">
<input type="checkbox" id="link0">
<input type="checkbox" id="link1">
<input type="checkbox" id="link2">
</form>

<table id="sample">
<tr>
</tr>
<tr>
<td class="cell0">test0</td>
<td class="cell1">test1</td>
<td class="cell2">test2</td>
</tr>
</table>

</body>
</html>

補足日時:2013/04/09 11:08
    • good
    • 0

こんにちは。



対象の要素にclass="hoge"とつけてあげて

$('.hoge').click ( function() {
// 処理A
});

では駄目でしょうか。

forで書きたいなら
for ( var i = 0; i < check.legnth; i ++ ) {
$(check[i]).click ( function() {
// 処理A
});
}

になると思いますが。


>var check = ['link0', '#link1','#link2'];

var check = ['#link0', '#link1','#link2'];
ですよね?

この回答への補足

早速のご回答ありがとうございます。


for ( var i = 0; i < check.legnth; i ++ ) {
$(check[i]).click ( function() {
// 処理A
});
}

こちらの方向で行いたいのですが、
どうやら.clickイベントが実行されないようなんです。


あと質問とは若干異なるのですが、

$(check[i]).click ( function() {
$(".cell"+i).toggle(this.checked);
});
};

を繰り返したいと思っています。
(処理Aが微妙に違う)


>var check = ['#link0', '#link1','#link2'];
すみません、#が抜けておりました。
ありがとうございます。

補足日時:2013/04/08 17:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!