从 JSTree 获取检查 ID - Get_Checked 找到节点而不是 ID
Getting Check IDs from JSTree - Get_Checked finds the nodes but not the ids
如果之前有人问过并回答过这个问题,我们深表歉意。我发现很多帖子似乎回答了这个问题,但 none 的解决方案对我有用,但我不明白为什么。
我正在使用 JSTree(版本 3)并将其更新到最新版本。我有一个 div 定义如下:-
<div id="ProductInterests">
<ul>
@foreach (var productGroup in ViewBag.ProductGroups)
{
<li class="jstree-open">@productGroup.Name
<ul>
@foreach (var product in productGroup.Products)
{
if (Model.LeadProductInterests.Any(lpi => lpi.ProductID == product.ID))
{
<li id="@product.ID" data-jstree='{"checked":true}'>@product.Name</li>
}
else
{
<li id="@product.ID" data-jstree='{"checked":false}'>@product.Name</li>
}
}
</ul>
</li>
}
</ul>
</div>
树配置如下:-
$(function () {
$("#ProductInterests").jstree
({
core: { themes: { icons: false } },
checkbox : { tie_selection : false },
plugins: ["themes", "checkbox"]
});
});
这正在生成 html,看起来像这样:-
<div id="ProductInterests">
<ul>
<li class="jstree-open">Markiser
<ul>
<li id="1" data-jstree='{"checked":false}'>Terrassemarkise</li>
<li id="2" data-jstree='{"checked":false}'>Vindusmarkise</li>
<li id="3" data-jstree='{"checked":false}'>Semi-Nova</li>
<li id="4" data-jstree='{"checked":false}'>Dukskift</li>
<li id="5" data-jstree='{"checked":false}'>Fasademarkise</li>
<li id="6" data-jstree='{"checked":false}'>Kurvmarkise</li>
<li id="7" data-jstree='{"checked":false}'>Andre</li>
</ul>
</li>
<li class="jstree-open">Utv. Persienner
<ul>
<li id="8" data-jstree='{"checked":false}'>L50</li>
<li id="9" data-jstree='{"checked":false}'>Spesial</li>
<li id="10" data-jstree='{"checked":false}'>Variant</li>
<li id="11" data-jstree='{"checked":false}'>L80</li>
</ul>
</li>
</ul>
</div>
这在我的 UI 中看起来很完美,我能够漂亮地选中和取消选中节点。
然后在我的表单中提交我有这个:-
$("form").submit
(
function () {
var checkedProductInterests = [];
$("#ProductInterests").jstree("get_checked", true).forEach(function () {
checkedProductInterests.push(this.id);
});
alert(checkedProductInterests.join(","));
}
);
从我能在网上找到的所有内容中,应该输出显示所有选定 ID 的警报,但事实并非如此。它正在输出空白列表。我可以推断它正确地找到了节点,因为它 returns 正确的空格数(我计算逗号)但 id 返回为空白。
我试过使用这种形式:jstree("get_checked", false) 并使用它而不是 this.id 但产生相同的结果。我也试过 jstree(true).get_checked(true) 的形式,同样的结果。
我假设我在节点上设置 id 的方式有问题,但它对我来说是正确的。
我错过了什么?
只要你有最新的 jstree 版本,这就足够了:
$("#ProductInterests").jstree(true).get_checked().join(',');
这是一个演示(选择并单击按钮):
http://jsfiddle.net/DGAF4/520/
http://jsfiddle.net/DGAF4/521/
如果之前有人问过并回答过这个问题,我们深表歉意。我发现很多帖子似乎回答了这个问题,但 none 的解决方案对我有用,但我不明白为什么。
我正在使用 JSTree(版本 3)并将其更新到最新版本。我有一个 div 定义如下:-
<div id="ProductInterests">
<ul>
@foreach (var productGroup in ViewBag.ProductGroups)
{
<li class="jstree-open">@productGroup.Name
<ul>
@foreach (var product in productGroup.Products)
{
if (Model.LeadProductInterests.Any(lpi => lpi.ProductID == product.ID))
{
<li id="@product.ID" data-jstree='{"checked":true}'>@product.Name</li>
}
else
{
<li id="@product.ID" data-jstree='{"checked":false}'>@product.Name</li>
}
}
</ul>
</li>
}
</ul>
</div>
树配置如下:-
$(function () {
$("#ProductInterests").jstree
({
core: { themes: { icons: false } },
checkbox : { tie_selection : false },
plugins: ["themes", "checkbox"]
});
});
这正在生成 html,看起来像这样:-
<div id="ProductInterests">
<ul>
<li class="jstree-open">Markiser
<ul>
<li id="1" data-jstree='{"checked":false}'>Terrassemarkise</li>
<li id="2" data-jstree='{"checked":false}'>Vindusmarkise</li>
<li id="3" data-jstree='{"checked":false}'>Semi-Nova</li>
<li id="4" data-jstree='{"checked":false}'>Dukskift</li>
<li id="5" data-jstree='{"checked":false}'>Fasademarkise</li>
<li id="6" data-jstree='{"checked":false}'>Kurvmarkise</li>
<li id="7" data-jstree='{"checked":false}'>Andre</li>
</ul>
</li>
<li class="jstree-open">Utv. Persienner
<ul>
<li id="8" data-jstree='{"checked":false}'>L50</li>
<li id="9" data-jstree='{"checked":false}'>Spesial</li>
<li id="10" data-jstree='{"checked":false}'>Variant</li>
<li id="11" data-jstree='{"checked":false}'>L80</li>
</ul>
</li>
</ul>
</div>
这在我的 UI 中看起来很完美,我能够漂亮地选中和取消选中节点。
然后在我的表单中提交我有这个:-
$("form").submit
(
function () {
var checkedProductInterests = [];
$("#ProductInterests").jstree("get_checked", true).forEach(function () {
checkedProductInterests.push(this.id);
});
alert(checkedProductInterests.join(","));
}
);
从我能在网上找到的所有内容中,应该输出显示所有选定 ID 的警报,但事实并非如此。它正在输出空白列表。我可以推断它正确地找到了节点,因为它 returns 正确的空格数(我计算逗号)但 id 返回为空白。
我试过使用这种形式:jstree("get_checked", false) 并使用它而不是 this.id 但产生相同的结果。我也试过 jstree(true).get_checked(true) 的形式,同样的结果。
我假设我在节点上设置 id 的方式有问题,但它对我来说是正确的。
我错过了什么?
只要你有最新的 jstree 版本,这就足够了:
$("#ProductInterests").jstree(true).get_checked().join(',');
这是一个演示(选择并单击按钮):
http://jsfiddle.net/DGAF4/520/
http://jsfiddle.net/DGAF4/521/