jquery 控件无法识别已编辑状态- JavaScript

kfgdxczn  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(106)

我有一个简单的控制形式,在那里我允许用户编辑字段。
如果用户已经编辑了一个字段,我们不会更新数据库中的值并将其标记为已编辑。
如果用户 * 没有编辑字段 *,我们从数据库中检索最新的值并更新相应的控件。
目前这不起作用。大约有一半的时间,即使在用户修改了控件之后,控件仍然被“替换”。
下面是我的代码:

@foreach (var row in Model.controls)
            {
              <input type="text" name="@row.Name" id="@row.NameID" value="@row.Value" edited="0" class="form-control data-field" onfocus="return ControlEdited(this.id)" style="width: 300px" />

           }

字符串
首先,我们生成控件。这些都是动态的,并形成了一个foreach从我的viewmodel。
编辑控件时,使用onFocus调用以下函数:

function ControlEdited(id) {
    document.getElementById(id).setAttribute('edited', 1);
    document.getElementById(id).style.backgroundColor = "yellow";
}


现在到了棘手的部分--下面我调用的这个函数只应该替换和重写那些没有被编辑过的字段。然而,它只在某些时候起作用。它通常会替换已编辑的字段。

function UpdateControls() {

    $(".data-field").each(function () {
        var nameAttr = $(this).attr('name');
        var id = $(this).attr('id');
        var edited = $(this).attr('edited');
        var stationID = document.getElementById('stationDD').value;

        if (edited == 0) { //control has not been edited, so we will access database and replace value if needed.
            var url = "/Manager/UpdateControlsFromDB/";
            $.ajax({
                url: url,
                data: { name: nameAttr, station: stationID },
                cache: false,
                type: "POST",
                success: function (data) {
                    if (data != null) {

                        document.getElementById(id).value = data;
                    }
                    else {

                    }
                },
                error: function (response) {
                    alert("Issue updating the page controls from database. Information: " + response.responseText);
                }
            });
        }
        else {
            //do nothing, user edited field so we do not update from database
        }

    });
}


我很困惑。这个编辑过的变量和相应的代码怎么会不起作用呢?在每个编辑器上调用onFocus事件,这应该立即将“edited”值呈现为1,并防止UpdateControls()方法触及它们。
任何帮助是非常感谢!

vql8enpb

vql8enpb1#

调试和console.log updateControls函数中的每个变量,并查看是否出现错误
我已经尝试了你的方法,似乎在我这边工作得很好

function ControlEdited(id) {
    document.getElementById(id).setAttribute('edited', 1);
    document.getElementById(id).style.backgroundColor = "yellow";
}

function editTxt(){
        $('.inp').each( function (){
            if($(this).attr('edited') == 0){
                   $.ajax({
                    type: 'get',
                    url: 'https://random-data-api.com/api/v2/users',
                    cache: true,
                    success:(res)=>{
                        $(this).val(res['first_name'])
                    }
                })
            } else {

            }
        })
    }

个字符

相关问题