【发布时间】:2015-03-07 14:40:49
【问题描述】:
我在 JavaScript 方面完全是新手,在 JQuery 方面更是如此。
我在理解 JQuery 脚本到底是做什么的时候遇到了一些问题,我试着解释一下情况。
在一个使用 Struts2 标签库的 JSP 页面中(它只是一个包装标准 JQuery 组件的标签库)我有这样的东西:
<s:form id="treeForm" >
<s:hidden name="idFolder" id="folderId"/>
<s:hidden name="event"/>
<s:hidden name="groupId"/>
<s:hidden name="fileUrlCon"/>
<s:hidden name="titleEvent"/>
<s:hidden name="folderPath" id="folderPath"/>
<table width="100%" border="0">
<tr>
<td width="33.3%">
<sjt:tree id="treeId2" jstreetheme="default"
rootNode="root" openAllOnLoad="false"
childCollectionProperty="children"
nodeTitleProperty="title"
nodeIdProperty="id"
>
</sjt:tree>
</td>
<td width="66.6%">
<s:form >
<sj:div id="resultEvents" href="%{loadFolderTechId}"
formIds="treeForm"
class="result ui-widget-content ui-corner-all"
loadingText=" "
onBeforeTopics="before"
onCompleteTopics="complete"
deferredLoading="true"
reloadTopics="reloadEvents"
>
</sj:div>
<s:submit action="projectCreationAction"/>
</s:form>
</td>
</tr>
</table>
</s:form>
<script type="text/javascript">
$(document).ready(function() {
$("#treeId2").bind("select_node.jstree", function (event, data) {
if (!isNaN(data.rslt.obj.attr("id"))) {
//foglia quindi block
document.getElementById("folderId").value = data.rslt.obj.attr("id");
document.getElementById("folderPath").value = '';
$.publish('reloadEvents');
} else {
document.getElementById("folderPath").value = data.rslt.obj.attr("id");
$.publish('reloadEvents');
}
})
window.setTimeout(
function() {
$("#treeId2").jstree("open_node", $('#root'));
},
1000);
});
</script>
sjt:tree 标记包装并基于 JQuery jsTree 插件,即:http://www.jstree.com/docs/config/,应该以相同的方式生成树。
它可以正常工作并在我的 JSP 页面中正确生成树。
我的 dubs 与在这棵树上运行的以下 JQuery 脚本有关:
$(document).ready(function() {
$("#treeId2").bind("select_node.jstree", function (event, data) {
if (!isNaN(data.rslt.obj.attr("id"))) {
//foglia quindi block
document.getElementById("folderId").value = data.rslt.obj.attr("id");
document.getElementById("folderPath").value = '';
$.publish('reloadEvents');
} else {
document.getElementById("folderPath").value = data.rslt.obj.attr("id");
$.publish('reloadEvents');
}
})
window.setTimeout(
function() {
$("#treeId2").jstree("open_node", $('#root'));
},
1000);
});
具体是做什么的?我正在尝试自己分析它,我认为它可以:
1) 首先它选择具有 id=#treeId2 的元素,因此它选择了我的整个树。
2) 然后 bind() 函数将处理程序附加到元素的事件。所以在这种情况下,处理的事件是选择我的树的一个节点。
3) 在这种情况下,我认为事件处理程序由以下定义的函数表示,该函数采用 2 个输入参数。现在我的疑问是:event 和 data 这两个参数到底是什么?
我认为 event 参数代表 select_node.jstree 事件,是真的吗? data 参数代表什么?
具体做什么:
document.getElementById("folderId").value = data.rslt.obj.attr("id");
document.getElementById("folderPath").value = '';
document.getElementById("folderId") 和 document.getElementById("folderPath") 代表什么?
你能解释一下这个脚本到底是做什么的吗?
【问题讨论】:
-
这两行都获取具有
id="folderId"和id="folderPath"的元素。我认为它们是输入字段,但您需要显示所有代码/HTML。 -
@TrueBlueAussie 哦,是的,这些是表单输入字段
-
第一行将输入的值设置为从数据中获得的值(通过外观选择节点)。第二个空白了第二个输入。请显示所有代码:)
-
@TrueBlueAussie 我已经编辑了原始帖子添加了其他代码
标签: javascript jquery jquery-plugins struts2 jstree