ユーザーからいくつかの選択を行う Web サイトのページがあります。Web サイトはモバイル ユーザー専用であるため、JQuery Mobile を使用しています。Web サイトも CMS によって管理されているため、VB.net で記述されたコード ビハインド ファイルからページを生成する必要があります。
ユーザーが行う必要があるすべての選択に対してcollapsible
、 Collective 内に I make がありますcollapsible-set
。一部の選択肢では、radiobuttonlist が生成されます。ラジオボタンの生成は、可能なすべてのピックを通過し、オプションごとにラジオボタンを生成するリピーターを通じて行われます。ユーザーがボタンを押して選択内容を確認すると、選択したオプションが収集され、サーバーに送信されて処理されます。
ここで、リピーターとコード ビハインドを調整して、必要なタグと属性を生成し、JQuery Mobile がレイアウトを設定できるように最善を尽くしましたが、生成されたラジオボタン リストが正常に機能しなくなりました。ページが読み込まれるたびに、最初のオプションが自動的にチェックされ、そのオプションにロックされます。一方、視覚的には、実際にはラジオボタン リスト全体のすべてのオプションを選択できます (別のオプションを選択しても、選択が解除されるオプションはありません)。これは単なる視覚的なものです (実際には、最初の選択のみがバックグラウンドでチェックされ、他の選択を試みても変更されません)。
リストに関して左右にいくつかのことを試しました。field-set
生成されたすべてのラジオボタンをまとめてバインドするためにリピーターの周りにタグを配置し、属性が一意であることを確認するためにコードを変更しました( name
ID は既に一意です)。これは、私がチェックした質問の1つへの簡単なリンクです。私の問題とは直接関係ありませんが、答えに従うことで解決できると思いました:Jquery mobile radio button selection。
HTML がコンポーネント内のラジオボタン リストの 1 つを探す方法は次のとおりです (CMS 生成前)。
<div class="detailblock thumbs" runat="server" id="div_plants" data-role="collapsible">
<asp:Literal ID="litTitle_plants" runat="server" />
<fieldset data-role="controlgroup">
<asp:Repeater ID="repDetails_plants" runat="server">
<ItemTemplate>
<asp:Literal ID="litValue" runat="server" Visible="false" />
<asp:RadioButton ID="radPlant" runat="server" GroupName="plant" />
</ItemTemplate>
</asp:Repeater>
</fieldset>
</div>
まずcollapsible
、プラントのすべてのオプションを含む があります。最初のリテラルは、のタイトルを設定するために使用されcollapsible
ます。次にfield-set
、ラジオボタンを一緒にバインドすることになっている があります。最後に、植物ごとに目に見えない値を生成するリピーターと、ラジオボタンがあります。
すべてのアイテムの生成を処理するコードは次のとおりです。
Protected Function ProcessProductPlant(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) As Boolean
Dim plant As em_clsProductSizeColorPlant = e.Item.DataItem
If plant Is Nothing Then
Return False
End If
Dim litValue As Literal = e.Item.FindControl("litValue")
litValue.Text = plant.id
Dim radPlant As RadioButton = e.Item.FindControl("radPlant")
If Not plant.Image Is Nothing Then
radPlant.Text = "<img src='" & plant.Image.ToLower & "' alt='" & plant.description & "' />"
Else
radPlant.Text = "<img src='" & "/websites/1/uploads/img/wapla/logo.jpg" & "' alt='" & plant.description & "' />"
End If
radPlant.Attributes.Add("name", "plant_choice_" & e.Item.ItemIndex)
If e.Item.ItemIndex = 0 Then
radPlant.Checked = True
litCurrentPlantId.Text = "var currentPlantId = '" & plant.id & "';"
End If
radPlant.Attributes.Add("onclick", "currentPlantId = '" & plant.id & "'; change_image();")
Return True
End Function
最後に、生成時に plant-collapsible が HTML でどのように見えるかを次に示します。
<div id="ctl24_div_plants" class="detailblock thumbs" data-role="collapsible">
<h2>1. choose a plant</h2>
<fieldset data-role="controlgroup">
<span name="plant_choice_0"><input id="ctl24_repDetails_plants_ctl00_radPlant" type="radio" name="ctl24$repDetails_plants$ctl00$plant" value="radPlant" checked="checked"/><label for="ctl24_repDetails_plants_ctl00_radPlant"><img src='/websites/1/uploads/image/productimages/filrouge/plants/jpg/cycas_thumb.jpg' alt='BUSINESS 01' /></label></span>
<span name="plant_choice_1"><input id="ctl24_repDetails_plants_ctl01_radPlant" type="radio" name="ctl24$repDetails_plants$ctl01$plant" value="radPlant" /><label for="ctl24_repDetails_plants_ctl01_radPlant"><img src='/websites/1/uploads/image/productimages/filrouge/plants/jpg/sanseveria_kirkii_thumb.jpg' alt='BUSINESS 01' /></label></span>
<span name="plant_choice_2"><input id="ctl24_repDetails_plants_ctl02_radPlant" type="radio" name="ctl24$repDetails_plants$ctl02$plant" value="radPlant" /><label for="ctl24_repDetails_plants_ctl02_radPlant"><img src='/websites/1/uploads/image/productimages/filrouge/plants/jpg/zamioculcas_thumb.jpg' alt='BUSINESS 01' /></label></span>
</fieldset>
</div>
1 つの項目が既にチェックされていることに注意してください。実際には、3 つのプラントすべてがチェックされているのを確認できますが、HTML では最初の選択のみがチェックされたままになります。
私を助けるためにさらに情報が必要な場合は、お気軽にお問い合わせください。すべてのヘルプは大歓迎です。
編集
すべてのラジオボタンのグループ名が同じである必要があることをどこかで見つけました。でItemTemplate
、既にグループ名を設定しましたが、生成された HTML のどこにも表示されません。コードでグループ名を設定する必要がありますか?それとも、生成された HTML にグループ名が表示されないようにする必要がありますか?
EDIT2
最初の選択設定がレイアウトを壊す可能性があるのではないかと疑って、ラジオボタンを強制的に更新してラジオボタンを修正しようとしました。HTML ドキュメント自体で次の JQuery スクリプトを使用して更新を行いました (colorchoices は、ページ上のラジオボタンの 2 番目のセットです)。
$(document).ready(function () {
$("fieldset[id='plantchoices']").children("input").each("refresh");
$("fieldset[id='colorchoices']").children("input").each("refresh");
});
注:このスクリプトは私の問題を解決しませんでした。