6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Javascript】特定のid付きのp要素をクリックする度にアラートする数字が増加(0にリセット可)

Last updated at Posted at 2014-08-01
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>特定のid付きのp要素をクリックする度にアラートする数字が増加(0にリセット可)</title>
<style type="text/css">
</style>
</head>
<body>

<h2>特定のid付きのp要素をクリックする度にアラートする数字が増加(0にリセット可)</h2>

<p id="a01">ここをクリック</p>
<br/>
<p id="a02">リセット</p>

<script type="text/javascript">

function getElementID(nm){
  return document.getElementById(nm);
}

var click=click||{};

click.id_base=(function(){

    var that={};

    that.fire=function(s){

      var id=s.id,bullet=s.bullet,para=s.para,flg=s.flg,
          targetElement=getElementID(id),
          clickListener=function(){
              bullet(para);
          };

          if(!flg){

              //クリックイベント1つ目を登録
              targetElement.onclick=clickListener;

          }else{

              //クリックイベント2つ目以降を登録
              if(targetElement.addEventListener){
                  targetElement.addEventListener('click',clickListener,false);
              }else{
                  targetElement.attachEvent('onclick',clickListener);
              }

          }

    };

    return that;

})();

var Add_Alert=(function(){
    
    var that={};
    var my={};
    
    my.cnt=0;
    
    my.getcnt=function(){
      return my.cnt;
    };
    
    my.setcnt=function(a){
     my.cnt=a;
     return 0;
    };
    
    that.add=function(){
      var cnt=my.getcnt();
      alert(cnt);
      cnt+=1;
      my.setcnt(cnt);
    };
    
    that.reset=function(){
      if(my.setcnt(0)===0){
        alert("リセット完了");
      }
    };
    
    return that;
    
})();

window.onload=function(){
click.id_base.fire({id:"a01", bullet:Add_Alert.add});
click.id_base.fire({id:"a02", bullet:Add_Alert.reset});
}

</script>

</body>
</html>

##解説
特定のid付きのp要素をクリックする度にアラートする数字が増加するサンプルを作った。
アラートする数字を格納する変数をグローバル変数にすると簡単にできるが、このサンプルでは関数Add_Alert中のmyオブジェクトに変数cntを作り、この変数にアラートする数字を格納することでグローバル変数を使用せずに実現させている。

###追記###
@sounisi5011さんの指摘通りclick.id_base関数を改善した。

###追記2###

    var that={};
        that.click_id=click.click_id;

Add_Alert関数の中のthatオブジェクトにclick_idメソッドを作ってclick.click_idを継承して使うといい感じだな。
※id_baseからclick_idに名称を変更した.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>特定のid付きのp要素をクリックする度にアラートする数字が増加(0にリセット可)</title>
<style type="text/css">
</style>
</head>
<body>

<h2>特定のid付きのp要素をクリックする度にアラートする数字が増加(0にリセット可)</h2>

<p id="a01">ここをクリック</p>
<br/>
<p id="a02">リセット</p>

<script type="text/javascript">

function getElementID(nm){
  return document.getElementById(nm);
}

var click=click||{};

click.click_id=(function(){

    var that={};

    that.fire=function(s){

      var id=s.id,bullet=s.bullet,para=s.para,flg=s.flg,
          targetElement=getElementID(id),
          clickListener=function(){
              bullet(para);
          };

          if(!flg){

              //クリックイベント1つ目を登録
              targetElement.onclick=clickListener;

          }else{

              //クリックイベント2つ目以降を登録
              if(targetElement.addEventListener){
                  targetElement.addEventListener('click',clickListener,false);
              }else{
                  targetElement.attachEvent('onclick',clickListener);
              }

          }

    };

    return that;

})();

var Add_Alert=(function(){
    
    var that={},my={};
        that.click_id=click.click_id;
    
    my.cnt=0;
    
    my.getcnt=function(){
      return my.cnt;
    };
    
    my.setcnt=function(a){
     my.cnt=a;
     return 0;
    };
    
    my.add=function(){
      var cnt=my.getcnt();
      alert(cnt);
      cnt+=1;
      my.setcnt(cnt);
    };
    
    my.reset=function(){
      if(my.setcnt(0)===0){
        alert("リセット完了");
      }
    };
    
    that.init=function(){
      this.click_id.fire({id:"a01", bullet:my.add});
      this.click_id.fire({id:"a02", bullet:my.reset});
    };
    
    return that;
    
})();

window.onload=function(){
Add_Alert.init();
}

</script>

</body>
</html>

##関連
[【Javascript】特定のid付きのdiv要素をクリックして特定の関数を実行させる][1]
[1]:http://qiita.com/kyoshiro-obj/items/1fd6615e9ab7da2e5b40

6
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?