我有一個使用無序列表顯示樹列表的頁面。對於每個有孩子的李,我希望它做一個ajax調用去獲得這些孩子,然後將它們顯示爲另一個ul/li組合。這樣可行。
但是,如果其中一個孩子也是父母,我希望它再次打一個ajax電話,然後去找它的孩子。如何捕獲事件並阻止它從泡泡到jquery ajax中的父級調用
問題是,當我進行額外的呼叫時,它會進行該呼叫,但會另外呼叫父母並刪除先前的呼叫。
這是問題:
-Parent
- Child 1
- Child 2
- child a <-- clicking here briefly opens up kids. Then "getchildren"
- child 2.a \-- bubbles up to Child 2. Then displays only child
- child 2.b \- a, b, c and child 2.a and 2.b go away.
- child b
- child c
- Child 3
下面是實際的jQuery的功能,使Ajax調用:
function getChildren(tsk) {
var taskId = '#'.concat(tsk);
alert("getChildren::taskid = "+taskId);
$.ajax({ //create an ajax request to load_page
type: "get",
dataType: "html",
url: "kids1.jsp?taskId="+tsk,
success: function(data){
alert("getChildren.ajax::data="+data);
$(taskId).html(data);
}
});
event.stopPropagation(); // <-- this doesn't work
}
這是我的頁面的「查看源文件」版本(一旦它呈現)。這顯示了哪些鏈接看起來像是「getChildren(tsk)」呼叫。創建li條目的代碼如下所示。 這是TOP(家長)級別。
<ul class="mktree" id="tree1">
<li class="liOpen" id="theJob" style="visibility:hidden">
<a href="jobDetail.jsp?rowSelected=1&jobNameSelected=2017_sb207_HRS89E-1_RP-HI.EDEN_PDU.09-06.09:39:09.tpcz4686-001" onClick='boldTask(this)' id="black" target=right>2017_sb207_HRS89E-1_RP-HI.EDEN_PDU.09-06.09:39:09.tpcz4686-001</a></li>
<ul id="treeList" name="treeList" style="visibility:hidden">
<li id=0200001700CE36AC143D0002000073B1><a href='taskDetail.jsp?taskNameSelected=0200001700CE36AC143D0002000073B1' id='gray' onClick='boldTask(this)' target=right> Batcher</a><input type='hidden' name='Batcher' value='[email protected]'></li>
<li class='liClosed' id=0200001700CE36AC14F60002000073B1 onClick=getChildren('0200001700CE36AC14F60002000073B1')><a href='taskDetail.jsp?taskNameSelected=0200001700CE36AC14F60002000073B1' id='blue' target=right> SEARCH_LOCK_ACT</a><input type='hidden' name='SEARCH_LOCK_ACT' value='[email protected]'></li>
<li id=0200001700CE36AC14B00002000073B1><img src='images/done.gif'><a href='taskDetail.jsp?taskNameSelected=0200001700CE36AC14B00002000073B1' id='blue' onClick='boldTask(this)' target=right> BinderCreator</a><input type='hidden' name='BinderCreator' value='[email protected]'></li>
...
以下是包含getChildren調用的代碼。它調用一個java方法(getChildTasks3)來創建單個li條目。
<ul class="mktree" id="theJob" style="visibility:hidden">
<a href="jobDetail.jsp?rowSelected=<%=rowSelected%>&jobNameSelected=<%=jobNameSelected%>" onClick='boldTask(this)' id="black" target=right><%=jobNameSelected%></a>
<%
// At this point, we've got the job
// Now get all the tasks
long Ltime = System.currentTimeMillis();
ArrayList jobTasks = job.getOrderedTasks();
for (int i = 0 ; i < jobTasks.size(); i++) {
TaskInfo jobTask = (TaskInfo)jobTasks.get(i);
request.setAttribute("taskNameSelected",jobTask.getTaskId());
tmpSession.setAttribute(jobTask.getTaskId(),jobTask);
String taskOutput = jobTask.getChildTasks3(jobTask, tmpSession);
%>
<%=taskOutput%>
<%
}
%>
</ul>
首先 - 我如何捕獲我的函數getChildren(tsk)中的事件?我需要捕捉它嗎?我怎麼才能讓它只運行我點擊的條目 - 而不是父條目?
我是jquery的新手 - 所以我很感激任何和所有的幫助!
更新:我能夠使用onClick函數得到它的工作。我嘗試使用class = myClickable,現在它只調用父級。這裏是代碼:
$(function() {
$(".my-clickable").on('click', function(event) {
var taskId=$(this).attr('id');
var tsk = '#'.concat(taskId);
alert("in clickable function: id: "+taskId); // <-- parent ID
//event.stopPropagation();
$.ajax({ //create an ajax request
type: "post",
dataType: "html",
url: "kids1.jsp?taskId="+taskId,
success: function(data){
alert("clickable.ajax::data="+data);
//$(tsk).html(data);
$(tsk).append(data);
}
}); // end ajax
event.cancelBubble=true;
});
});
有什麼建議嗎?
,它仍然沒有工作。我應該使用「onClick = getChildren(活動,'0200 ...)」沒有什麼特別的事件?我是否需要將事件放在單引號或其他內容中? – cuffedm
好的 - 這是改變生活!我看到使用類與onClick事件的好處。我現在正在使用這個類的版本。還有一個問題 - 是否可以在我的可單擊函數中使用ajax調用?謝謝!!!! – cuffedm
我看到可以進行ajax調用。我只需要正確配置樹。再次感謝你! :) – cuffedm