2016-05-16 68 views
0

我知道了差不多完成了,虽然它不会在第一one.Here的我的剧本之后添加任何行:我怎样才能让我的动态表更新与AJAX的SharePoint列表?

 $('#submitdataAccounts').click(function(){ 
      $('#tableAc tbody tr').each(function(){ 


      var productType = $(".productType").val(); 
      var selectorNSC = $(".selectNsc").val(); 
      var accountNumber= $(".accountNumber").val(); 
      var spFirstNameVal= $(".spFirstName").val(); 
      var spSurnameVal = $(".spSurname").val(); 
      var spMobileVal = $(".spMobile").val(); 

    var data = { 
      __metadata: { 'type': 'SP.Data.Accounts_x005f_ListListItem' }, 
    "OData__x0065_c91": productType, 
    "tsyh": selectorNSC, 
    "OData__x0075_dm6": accountNumber, 
    "fddm": spFirstNameVal, 
    "n72h": spSurnameVal, 
    "OData__x0066_r77": spMobileVal, 

     }; 
     $.ajax({ 
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Accounts_List')/items", 
        method: "POST", 
           data: JSON.stringify(data), 

          headers: { 
       "Accept": "application/json;odata=verbose", 
       "Content-Type": "application/json;odata=verbose", 
       "X-RequestDigest": $("#__REQUESTDIGEST").val(), 
      }, 
        success: function (data) { 
           alert('Item added successfully'); 
        }, 
        error: function (error) { 
         alert("Error: "+ JSON.stringify(error)); 
       } 
      }); 

}); 


}); 

我使用的是在脚本中添加其行,像这样的表:

document.getElementById("tableAc").insertRow(-1).innerHTML ='<td class="style1a">' + 
'<select name="productType" class="btn btn-default dropdown-toggle Select1" style="width:150px"><option value="" selected=""><option value="1">1</option><option value="2">2</option></select> 
<div class="divhidden" ><i><br />2nd Party Surname<i/><br /><input type="text" class="form-control" style="width: 150px" /></div></td><td class="style1a"><input type="text" class="form-control" style="width: 150px"/><div class="divhidden" ><i><br />2nd Party Mobile<i/><br /><input type="text" class="form-control" style="width: 150px" /></div></td><td class="style1a"><input type="checkbox" style="width: 150px" class="checkboxAC"/></td><td><a class="btn btn-danger" onclick="SomeDeleteRowFunction(this);" ><i class="fa fa-trash-o" title="Delete" aria-hidden="true"></i><span class="sr-only">Delete</span></a></td>'; 

它模仿与实际表格相同的布局,所以它只是在按下AddRow按钮时重复第一行。

在我的SharePoint列表,我刚才看到增加了我填写行的量相同的第一行。

任何想法?

而且,我必须指出,我2场中的每个细胞去到不同的地方在每个

感谢

编辑:

现在看起来是这样,但仍然不能正常工作:

   $('#submitdataAccounts').on('click',function(){ 
       $('table tr').each(function(){ 


var productType = $(this).find(".productType").val(); 
var selectorNSC = $(this).find(".selectNsc").val(); 
var accountNumber= $(this).find(".accountNumber").val(); 
var spFirstNameVal= $(this).find(".spFirstName").val(); 
var spSurnameVal = $(this).find(".spSurname").val(); 
var spMobileVal = $(this).find(".spMobile").val(); 

    var data = { 
      __metadata: { 'type': 'SP.Data.Accounts_x005f_ListListItem' }, 
    "OData__x0065_c91": productType, 
    "tsyh": selectNSC, 
    "OData__x0075_dm6": accountNumber, 
    "fddm": spFirstName, 
    "n72h": spSurname, 
    "OData__x0066_r77": spMobile, 
     }; 
     $.ajax({ 
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Accounts_List')/items", 
        method: "POST", 
        data: JSON.stringify(data), 
        headers: { 
       "Accept": "application/json;odata=verbose", 
       "Content-Type": "application/json;odata=verbose", 
       "X-RequestDigest": $("#__REQUESTDIGEST").val(), 
      }, 
        success: function (data) { 
           alert('Item added successfully'); 
        }, 
        error: function (error) { 
         alert("Error: "+ JSON.stringify(error)); 
       } 
      }); 
    }); 

}); 
+0

如果我理解正确,那么类productType,selectNsc,accountNumber,...的元素是表格行内的单元格。所以,为了得到单元格的值,我认为你应该改变$(“。productType”)。与$(this).find(“。productType”)。text();或$(this).find(“。productType”)。html(); –

+0

对不起,这里是正确的建议:带有class productType,selectNsc,accountNumber,...的元素是位于表格单元格内的元素。所以,为了得到这些元素的值,我认为你应该用$(this).find(“。productType”)。val();' –

+0

'改变'$(“。productType”).val嗨,谢谢,明天我会放弃工作。这可能会影响它只更新第一行,然后不更新任何其他行? – Stacker

回答

1

例如,如果您的表格包含5行。

里面的循环槽的所有要素TR如果你这样写:$(".productType").val();

这jQuery将选择具有productType类在整个页面的所有元素。

但它只会返回具有此类的第一个元素的值。

但是如果你这样写:$(this).find('.productType').val();

在这种情况下,$(this)表示当前TR元素。

因此,您只将搜索范围缩小到当前TR元素中具有productType类的元素。

要看到差距,试试这个代码:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script> 
     <script> 
     $(document).ready(function(){ 
      $('#MyButton').on('click',function(){ 
       $('table tr').each(function(){ 
        console.log($(this).find(".mySelect").val()); 
        console.log($(".mySelect").val()); 
       }); 
      }); 
     }); 
     </script> 
    </head> 
    <body> 
     <button id="MyButton">Test</button> 
     <table id="mytable"> 
      <tr> 
       <td><select class="mySelect"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select></td> 
      </tr> 
      <tr> 
       <td><select class="mySelect"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select></td> 
      </tr> 
      <tr> 
       <td><select class="mySelect"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select></td> 
      </tr> 
     </table> 
    </body> 
</html> 
+0

嘿,我明白了。事实证明,我忘了匹配类加起来 – Stacker

1

你总是从环获得第一项。

与代码替换下面

var productType = $(this).find(".productType").val(); 
var selectorNSC = $(this).find(".selectNsc").val(); 
var accountNumber= $(this).find(".accountNumber").val(); 
var spFirstNameVal= $(this).find(".spFirstName").val(); 
var spSurnameVal = $(this).find(".spSurname").val(); 
var spMobileVal = $(this).find(".spMobile").val(); 

变量赋值看看是否有帮助。

+0

嗨,我其实本来实际上改变它本身,但它没有奏效。我现在也试过你的代码,它仍然只是给我第一行 – Stacker

+0

尝试console.log每个变量,并注释掉现在的Ajax请求。 f12浏览器工具应该注销这些值。 –

+0

另外你的字段名称看起来很奇怪。他们是否正确? –