[英]Update without refreshing the page
我正在使用此代碼通過POST和GET調用將項目從一個列表移動到另一個列表,以及來回移動。 但是,每次更改后,頁面都會刷新。 我試圖弄清楚如何在不刷新頁面的情況下應用列表更新和更改。 這可能嗎?
僅僅通過代碼,我無法確定是什么原因導致頁面刷新,但是我猜測它與HTML按鈕有關?
JS:
var user;
$(document).ready(function() {
//Populate the users pick list
var strHTMLSiteUsers = "";
$().SPServices({
operation: "GetUserCollectionFromSite",
async: true,
completefunc: function(xData, Status) {
$(xData.responseXML).find("User").each(function() {
strHTMLSiteUsers += "<option value='" + $(this).attr("LoginName") + "'>" + $(this).attr("Name") + "</option>";
});
$("#my_SiteUsers").append(strHTMLSiteUsers);
}
});
RefreshGroupLists();
});
function RefreshGroupLists(){
var strHTMLAvailable = "";
var strHTMLAssigned = "";
var arrOptionsAssigned = new Array();
var intOpts = 0;
var booMatch;
var booErr = "false";
//current user
user = $('#my_SiteUsers').val();
$("#my_SPGroupsAssigned").html("");
$("#my_SPGroupsAvailable").html("");
if($("#my_SiteUsers").attr("value") == 0){
alert("You must select a user");
return;
}
//Populate the Groups Assigned
$().SPServices({
operation: "GetGroupCollectionFromUser",
userLoginName: user,
async: true,
completefunc: function(xData, Status) {
$(xData.responseXML).find("errorstring").each(function() {
if(user='default'){
return;
}else{
alert("User not found");
booErr = "true";
return;
}
});
$(xData.responseXML).find("Group").each(function() {
strHTMLAvailable += "<option value='" + $(this).attr("Name") + "'>" + $(this).attr("Name") + "</option>";
arrOptionsAssigned[intOpts] = $(this).attr("Name");
intOpts = intOpts + 1;
});
$("#my_SPGroupsAssigned").append(strHTMLAvailable);
}
});
//Populate available site groups
if(booErr == "false"){
$().SPServices({
operation: "GetGroupCollectionFromSite",
async: true,
completefunc: function(xData, Status) {
$(xData.responseXML).find("Group").each(function() {
booMatch = "false";
for (var i=0;i<=arrOptionsAssigned.length;i++){
if($(this).attr("Name") == arrOptionsAssigned[i]){
booMatch = "true";
break;
}
}
if(booMatch == "false"){
strHTMLAssigned += "<option value='" + $(this).attr("Name") + "'>" + $(this).attr("Name") + "</option>";
}
});
$("#my_SPGroupsAvailable").append(strHTMLAssigned);
}
});
}
}
function AddGroupsToUser(){
var i;
if($("#my_SiteUsers").attr("value") == 0){
alert("You must select a user");
return;
}
if($("#my_SPGroupsAvailable").val() == null){
alert("You haven't selected any groups to add");
return;
}
else{
var arrGroups = $("#my_SPGroupsAvailable").val();
for (i=0;i<arrGroups.length;i++){
$().SPServices({
operation: "AddUserToGroup",
groupName: arrGroups[i],
userLoginName: user,
async: true,
completefunc: null
});
}
RefreshGroupLists();
}
}
function RemoveGroupsFromUser(){
var i
if($("#my_SiteUsers").attr("value") == 0){
alert("You must select a user");
return;
}
if($("#my_SPGroupsAssigned").val() == null){
alert("You haven't selected any groups to remove");
return;
}
else{
var arrGroups = $("#my_SPGroupsAssigned").val();
for (i=0;i<arrGroups.length;i++){
$().SPServices({
operation: "RemoveUserFromGroup",
groupName: arrGroups[i],
userLoginName: user,
async: true,
completefunc: null
});
}
RefreshGroupLists();
}
}
HTML:
<table align="center">
<tr>
<td colspan="3" style="text-align:center">
<font style="font-weight:bold">Select a User: </font>
<select id="my_SiteUsers" style="width:250px;" onchange="RefreshGroupLists()">
<option value='default' disabled="disabled">Select a user</option>
</select>
</td>
</tr>
<tr>
<th class='ms-vh2'>Available Groups</th>
<th></th>
<th class='ms-vh2'>Assigned Groups</th>
</tr>
<tr>
<td class='ms-vb2'>
<select id="my_SPGroupsAvailable" style="width:150px;height:150px;" multiple="multiple"></select>
</td>
<td>
<button id="my_AddGroupsToUser" style="width:40px;" onclick="AddGroupsToUser()">>></button><br><br>
<button id="my_RemoveGroupsFromUser" style="width:40px;" onclick="RemoveGroupsFromUser()"><<</button></td>
<td class='ms-vb2'>
<select id="my_SPGroupsAssigned" style="width:150px;height:150px;" multiple="multiple"></select>
</td>
</tr>
</table>
看起來是這樣的:
編輯:我意識到按鈕導致刷新,所以我將其添加到JS。 現在,頁面無法刷新,但列表無法正確更新。 因此,如果我選擇5組並移動它們,也許1或2組將“視覺上”移動,那么當我刷新時,它們全部都移動了。 因此,這只是一些UI問題。 .click(function() { return false; });
在您的AddGroupsToUser函數中,添加一個將調用RefreshGroupList的returnfunc。 然后在for循環之后刪除RefreshGroupList上的調用。
您發布的代碼將循環運行並開始n次異步操作。 周期結束后,它將更新列表,但是由於操作是異步的,因此其中一些操作已完成,而某些操作正在運行。 這就是為什么您看到列表部分更新的原因。
這應該在組的每個“保存”處更新列表:
function AddGroupsToUser(){
var i;
if($("#my_SiteUsers").attr("value") == 0){
alert("You must select a user");
return;
}
if($("#my_SPGroupsAvailable").val() == null){
alert("You haven't selected any groups to add");
return;
}
else{
var arrGroups = $("#my_SPGroupsAvailable").val();
for (i=0;i<arrGroups.length;i++){
$().SPServices({
operation: "AddUserToGroup",
groupName: arrGroups[i],
userLoginName: user,
async: true,
completefunc: function(xData, Status) {
RefreshGroupLists();
}
});
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.