RSFormをセットアップしています!ラジオボタンを使用するプロフォームですが、ラジオボタンの入力を非表示にして、選択にラベルを使用したいのですが、質問のHTMLは次のとおりです。
<div class="rsform-block rsform-block-question">
<div class="formControlLabel">This is the question...?</div>
<div class="formControls">
<div class="formBody">
<p class="rsformVerticalClear">
<input type="radio" id="Question0" value="First Answer" name="form[Question]">
<label for="Question0">First Answer</label>
</p>
<p class="rsformVerticalClear">
<input type="radio" id="Question1" value="Second Answer" name="form[Question]">
<label for="Question1">Second Answer</label>
</p>
<p class="rsformVerticalClear">
<input type="radio" id="Question2" value="Third Answer" name="form[Question]">
<label for="Question2">Third Answer</label>
</p>
</div>
</div>
</div>
とにかくjQueryでこれを行うことができますか?
CSSを使用して、選択したラベルの背景(クリックすると)を変更したいのですが、入力ラジオボタンが変わりますが、ラベルをアクティブ/フォーカスに変更する方法を理解できません。
以下はうまくいくと思いますが、ラベルにクラスが関連付けられていないため、うまくいきません。
$("input:radio[name='form[Question]']").change(function(){
$("label").removeClass("selected");
$("label[for='" + this.id + "']").toggleClass("selected", this.checked);
});
何かアイデアはありますか?
まず、jQueryライブラリがロードされていることを確認してください。ブラウザー開発者ツールを使用して、レンダリングされたヘッドを検査し、ロードされていることを確認します。そうでない場合は、テンプレートからロードするか、問題のページレンダリングを処理するコンポーネントビューに対してテンプレートのオーバーライドを実行する必要があります。どちらの場合も、次のものを上部に追加する必要があります。
JHtml::_('jquery.framework');
以下のコードスニペットを編集して、IIFEでラップし、jQueryオブジェクトを$として関数に渡しました。これを行う必要があるのは、Joomlaが引き続きMootoolsを使用しているためです。ただし、段階的に廃止され、ライブラリメソッドへのアクセスにも$を使用しています。この競合には、IIFEを使用するか、jQueryをnoConflict()モードで使用する必要があります。
ラベルを見つけてクラスを切り替えるためにコールバック関数でクリックされたターゲットを参照すると、これが解決されます。
(function($) {
$(document).ready(function(){
$('input:radio[name="form[Question]"]').change(function(){
console.log('Change event callback fired!');
$(this).next().toggleClass("selected", $(this).prop("checked"));
});
});
})(jQuery);
また、修飾子をthis.checkedから$(this).prop( "checked")に変更しました。よくある間違いは、ネイティブJavaScriptオブジェクトのプロパティとメソッドが同じ要素のjQueryオブジェクトで使用できると想定することです。
答えを編集して、jQueryのdocument readyメソッド内のラッピング関数を反映し、DOMが完全に読み込まれるようにしました。