【问题标题】:jQuery .val() Not Actually Changing ValuejQuery .val() 实际上没有改变值
【发布时间】:2021-03-17 19:22:34
【问题描述】:

更新:我觉得我可能遗漏了关键信息...列类型是个人或组类型。我尝试了一行文本,它工作得很好。不注册为空。但对于其他条目/预填充输入需要使用“人员”或“组”列来确定其他输入。使用元数据

我有一个 SP 列表,其中我的第一列是使用 AJAX 自动填充用户的表单。

它用正确的值填充字段没有问题。我的问题是当您可以看到已自动放置在那里的值并点击表单提交时,它仍然将该字段读取为空白并告诉我“您不能将其留空”。

您在那里看到了值,但它有点被推到文本框的左角,隐藏在输入框默认占位符文本旁边。我想知道这是否也可能导致问题?是否可以隐藏占位符文本?

如果我单击文本框,然后按任意键(Enter/空格/等),它会注意到自动插入的值。

在这被标记为重复之前,我已经对帖子和线程进行了尽职调查,并找到了与此问题类似的帖子,但解决方案不起作用。喜欢这里的这篇文章: val() doesn't trigger change() in jQuery

这是我的电话和附加信息:

$(function(){
    $.ajax({
        url: webUri + "/_api/sp.userprofiles.peoplemanager/GetMyProperties",
        type: "GET",
        headers: {
            "Accept": "application/json; odata=verbose"
        },
        success: function(dataCurrentUser){
            console.log(dataCurrentUser)
            $("[title='User']").val(dataCurrentUser.d.AccountName).keyup().change();
        }
    })
})

【问题讨论】:

  • 让我们看看你的标记。此外,$().val(dataCurrentUser.d.AccountName).keyup().change(); 的性能略高一些(看起来更酷)。
  • 我敢打赌.focus().blur() 会胜任这项工作。为了便于访问,您需要将焦点返回到调用元素。
  • 您确定您没有遇到异步问题吗?例如,如果验证发生在成功回调之前
  • @DanielA.White 我将不得不创建一个需要一点时间的。这就是我在

标签: javascript jquery sharepoint


【解决方案1】:

我的测试代码供你参考:

<script>
  $(function () {
    $.ajax({
      url: _spPageContextInfo.webAbsoluteUrl + "/_api/sp.userprofiles.peoplemanager/GetMyProperties",
      type: "GET",
      headers: {
        "Accept": "application/json; odata=verbose"
      },
      success: function (dataCurrentUser) {
        console.log(dataCurrentUser)
        var ppTitle = "people";
        //$("[title='people']").val(dataCurrentUser.d.DisplayName).keyup().change();
        var _PeoplePicker = $("div[title='" + ppTitle + "']");
        var peoplePickerEditor = _PeoplePicker.find("[title='" + ppTitle + "']");
        var _PeoplePickerTopId = _PeoplePicker.attr('id');
        peoplePickerEditor.val(dataCurrentUser.d.DisplayName);
        var ppobject = SPClientPeoplePicker.SPClientPeoplePickerDict[_PeoplePickerTopId];
        ppobject.AddUnresolvedUserFromEditor(true);
      }

    })
  })
</script>

博客参考: People Picker Field Actions In SharePoint Using JavaScript (JSOM)

更新:

<script>
    $(function () {
        SP.SOD.executeFunc('clientpeoplepicker.js', 'SPClientPeoplePicker', function () {
            $.ajax({
                url: _spPageContextInfo.webAbsoluteUrl + "/_api/sp.userprofiles.peoplemanager/GetMyProperties",
                type: "GET",
                headers: {
                    "Accept": "application/json; odata=verbose"
                },
                success: function (dataCurrentUser) {
                    console.log(dataCurrentUser)
                    var ppTitle = "people";
                    //$("[title='people']").val(dataCurrentUser.d.DisplayName).keyup().change();
                    var _PeoplePicker = $("div[title='" + ppTitle + "']");
                    var peoplePickerEditor = _PeoplePicker.find("[title='" + ppTitle + "']");
                    var _PeoplePickerTopId = _PeoplePicker.attr('id');
                    peoplePickerEditor.val(dataCurrentUser.d.DisplayName);
                    var ppobject = SPClientPeoplePicker.SPClientPeoplePickerDict[_PeoplePickerTopId];
                    ppobject.AddUnresolvedUserFromEditor(true);
                }

            })
        })
    });

</script>

测试结果:

【讨论】:

  • 感谢您的回答 Amos,但我在尝试此操作时遇到了很多错误。
  • 第一个:SPClientPeoplePicker is not defined 所以我添加了脚本&lt;script type="text/javascript" src="/_layouts/15/clientpeoplepicker.js"&gt;&lt;/script&gt;,这里提到了sharepoint.stackexchange.com/questions/268699/…。然后我再试一次,我收到这个错误Uncaught TypeError: Cannot read property 'AddUnresolvedUserFromEditor' of undefined
  • 而且它不像我之前的代码那样填充到输入框中。正在寻找解决方案
  • 像魅力一样工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
相关资源
最近更新 更多