0

...但是如果该值最初为空,例如“”,则无法使用相同的键更改该值!

function loadDialog(link, e, ajaxRequest) {

    e.preventDefault();
    var $title = link.innerHTML;
    var $contenturl = $(link).attr('href');
    var $dialog = $('<div id="MyDialog"></div>');

    // Read value from hidden input field
    var templateIdValue = $('input[name=TemplateId]').val();     

    // Change the value: This will always and only happen the 2nd time I come here,
    // the first time the templateIdValue will always be empty
    if (templateIdValue != '') {
        templateIdValue = 777;
    }

    $dialog.load($contenturl).data('templateIdKey', templateIdValue).dialog({
        title: $title,
        autoOpen: true,
        modal: true,               
        buttons: {
            "OK": function () {debugger;
                ajaxRequest($(this), $('form', this));
            },
            "Cancel": function () {
                $dialog.dialog("close");
            }
        }
    });
}

当第二次 templateIdValue 更改为 777

我来到这段代码:

在这里,我再次检索该值,它应该是 777。但它不是。它是空的 !

@model ITMS.Web.Models.UnitViewModel

@*Remote Validation*@
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<script type="text/javascript">

    $(document).ready(function () {
        var templateId = $('#MyDialog').data('templateIdKey');
        $('input[name=TemplateId]').val(templateId);      
    }); 

</script>

@using (Html.BeginForm("Create", "Unit"))
{ 
     @Html.ValidationSummary(false)
    <p class="editor-label">@Html.LabelFor(model => model.Name)</p>
    <p class="editor-field">@Html.EditorFor(model => model.Name)</p>
    <p class="editor-field">@Html.ValidationMessageFor(model => model.Name)</p> 

    @Html.HiddenFor(x => x.TemplateId)    
}

如何更改第一次使用 .data() 方法传递的键的值?

更新

  // Does not cache the ajax requests to the controller e.g. IE7/8/9 is doing that...
    $.ajaxSetup({ cache: false });

    $(document).ready(function () {
        $('#OpenTemplate').click(function (event) { loadDialog(this, event, openTemplate); });
        $('#CreateTemplate').click(function (event) { loadDialog(this, event, createTemplate); });
        $('#DeleteTemplate').click(function (event) { loadDialog(this, event, deleteTemplate); });

        $('#CreateUnit').click(function (event) { loadDialog(this, event, createUnit); });
        $('#DeleteUnit').click(function (event) { deleteUnit(); });

        $('#CreateTeststep').click(function (event) { loadDialog(this, event, createTeststep); });
        $('#DeleteTeststep').click(function (event) { deleteTeststep(); });

        $('#SaveTemplate').click(function (event) { saveTemplate(); });    
    });
4

1 回答 1

0

即使在更新之后,我也发现您的问题相当令人困惑,因此我仍然不太了解您要做什么,但是您使用的方式似乎存在两个大问题.data()

第一个问题是您在文档就绪处理程序中检索值:

$(document).ready(function () {
    var templateId = $('#MyDialog').data('templateIdKey');

...但是在调用该函数以响应单击之前不会存储该值,loadDialog()因此由于尚未处理任何单击,因此当时自然可能没有针对该键的数据。

其次,loadDialog()每次单击几个元素中的任何一个时都会调用相同的函数,但每次loadDialog()调用它都会创建一个新的"MyDialog"div,然后用于.data()将键和值与该新 div 关联:

var $dialog = $('<div id="MyDialog"></div>');
// other code, then
$dialog.load($contenturl).data('templateIdKey', templateIdValue)

同样,您的问题并不清楚,但您似乎在说您希望这会更新为先前创建的"MyDialog"div 存储的值,但.data()会将值与单个元素关联。为什么每次都重新创建对话框 div?

于 2012-10-02T13:27:29.617 回答