jquery - 動的に作成されたボタンのクリックイベントが動作しない [duplicate].
2023-09-20 14:30:59
質問
私の要件は、json配列のカウントと同じ数のボタンを作成することです。jqueryで動的にボタンを作成することに成功しました。しかし、jqueryの.ready関数内のメソッドがクリックアクションのために呼び出されていません。私はSOで検索を試みました。いくつかの解決策を見つけましたが、私には何も働きませんでした。私はjqueryの非常に新しいです。助けてください...
私のコード。 jQueryです。
$(document).ready(function()
{
currentQuestionNo = 0;
var questionsArray;
$.getJSON('http://localhost/Sample/JsonCreation.php', function(data)
{
questionsArray = data;
variable = 1;
//CREATE QUESTION BUTTONS DYNAMICALLY ** NOT WORKING
for (var question in questionsArray)
{
var button = $("<input>").attr("type", "button").attr("id", "questionButton").val(variable);
$('body').append(button);
//Tried using .next here - but it dint work...
//$('body').append('<button id="questionButton">' + variable + '</button>');
variable++;
}
displayQuestionJS(questionsArray[currentQuestionNo], document);
});
$("button").click(function()
{
if ($(this).attr('id') == "nextQuestion")
{
currentQuestionNo = ++currentQuestionNo;
}
else if ($(this).attr('id') == "previousQuestion")
{
currentQuestionNo = --currentQuestionNo;
}
displayQuestionJS(questionsArray[currentQuestionNo], document);
});
function displayQuestionJS(currentQuestion, document)
{
document.getElementById('questionNumber').innerText = currentQuestion.questionNumber;
document.getElementById('questionDescription').innerText = currentQuestion.quesDesc;
$('label[for=optionA]').html(currentQuestion.optionA);
$('label[for=optionB]').html(currentQuestion.optionB);
$('label[for=optionC]').html(currentQuestion.optionC);
}
HTML content
<form method="post" name="formRadio">
<label id="questionNumber"></label>.
<label id="questionDescription"></label> <br />
<input type="radio" id="optionA"> </input> <label for="optionA"></label> <br />
<input type="radio" id="optionB"> </input> <label for="optionB"></label> <br />
<input type="radio" id="optionC"> </input> <label for="optionC"></label> <br />
<button id="previousQuestion">Previous Question</button>
<button id="nextQuestion">Next Question</button>
<br />
<br />
<input type="submit" id="submitButton" name="submitTest" value="Submit"></input>
</form>
EDIT -- サンプル .on メソッドコード - 別ファイルです。作業中 - どうもありがとうございました
<script>
$(document).ready(function()
{
$("button").click(function()
{
var button = '<input type="button" id="button2" value="dynamic button">';
$('body').append(button);
});
});
$(document).on('click','#button2', function()
{
alert("Dynamic button action");
});
</script>
</head>
<body>
<button id="button">Static Button</button>
</body>
どのように解決するのですか?
ボタンを動的に作成する場合、そのボタンを呼び出すために
.live()
メソッドで呼び出す必要があります。
というメソッドがありますが、このメソッドは非推奨です (非推奨メソッドの一覧は はこちら を参照)。もし、jquery 1.10以上を使いたい場合は、この方法でボタンを呼び出す必要があります。
$(document).on('click', 'selector', function(){
// Your Code
});
例
もし、あなたのhtmlが以下のようなものであれば
<div id="btn-list">
<div class="btn12">MyButton</div>
</div>
jqueryはこのように書きます。
$(document).on('click', '#btn-list .btn12', function(){
// Your Code
});
関連
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み] jQueryを使用してハイパーリンクのhref属性を変更する方法
-
[解決済み] jQueryのイベントハンドラを削除する最良の方法?
-
[解決済み] jQueryの送信ボタンの無効化・有効化
-
[解決済み】jQueryで要素の種類を取得する
-
[解決済み】ボタンクリックによるフォームの自動投稿を無効にする
-
[解決済み] jQuery Clickはラベルをクリックすると2回実行されます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み] jQuery hasAttrで要素に属性があるかどうかをチェックする【重複あり
-
[解決済み] jQueryで動的なHTML要素にイベントを添付するにはどうすればよいですか?[重複しています]。
-
[解決済み] Google Maps APIでマウスのスクロールホイールによる拡大縮小を無効にする方法
-
[解決済み] jQueryがどのバージョンで読み込まれているかを確認するには?
-
[解決済み] jQueryを使用してDropDownListの値を設定するにはどうすればよいですか?
-
[解決済み】$(window).width()がメディアクエリとは違う
-
[解決済み] jQueryを使用して文字列から最後の文字を削除する方法は?
-
[解決済み] jqueryでJsonデータを$.eachでループさせる