2017-02-16 11 views
3

ボタンの識別子を変更するクリックイベントを作成しました。同じボタンで2回目のクリックイベントを作成しましたが、今回は新しいIDで作成しました。ボタンをクリックすると、もう一度。私はいつも古いイドと最初の行動をしています。この例をよりよく説明するためのコードを以下に示します。同じボタンで2つの異なるビヘイビアを実現する方法

$(document).on('click', '#button', function() { 
 
    $(this).attr('id', 'buttonBis'); 
 
}); 
 

 
$(document).on('click', '#buttonBis', function() { 
 
    alert('here'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button id="button">Click me twice to see the alert()</button>

:アイデアは、あなたが動的に、あなたが委任されたイベントハンドラを使用する必要があります識別子を変更している場合は、同じボタン

$('#button').on('click',function() { 
    $(this).attr('id','buttonBis'); 
}); 

$('#buttonBis').on('click',function() { 
    alert('here'); 
}); 
+0

2、そのColneのによりDOMノードを置換することにより、イベント(の複製を防止する)新しいボタンIDにイベントを割り当て、添付を除去するために、1つのボタンのIDを関数を作成しますか? – guradio

+0

@Rory McCrossanのように言いました。私はクラスを変更し、IDは変更しません。 – KubiRoazhon

答えて

6

を持つ2つの異なる動作を行うことですidの属性を動的に変更することは非常に良い考えではなく、可能な場合は避けるべきです。クラスを追加/削除するほうがはるかに良い選択肢になると思います。

+0

もう1つより優れています。 +1 –

+0

はい、あなたは正しいです。 idが項目を一意にするためです。私はいくつかのクラスを追加することでそれを変更します。ありがとう – KubiRoazhon

0

$('#button').on('click',function() { 
 
    $(this).attr('id','buttonBis'); 
 
    //clone the node then reissign to the same node 
 
    // which removes the previous attached events 
 
    var self = this.cloneNode(true); 
 
    $(this).replaceWith(self); 
 
    newevent(); 
 
}); 
 

 

 
var newevent = function() { 
 
\t $('#buttonBis').on('click',function() { 
 
     alert('here'); 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="button" >Click Me twice </button>

+1

'this.parentNode.replaceChild ...の代わりにFYIだけです。jQueryは' replaceWith() 'メソッドを使用しています。 –

+0

@RoryMcCrossanうれしい、ありがとう。 –

関連する問題