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");
            }
        }
    });
}

2回目に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

更新後も質問がわかりにくいので、何をしようとしているのかよくわかりませんが、使い方には2つの大きな問題があるようです.data()

最初の問題は、ドキュメントレディハンドラーで値を取得することです。

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

...ただし、クリックに応答して関数が呼び出されるまで値は保存されないloadDialog()ため、クリックがまだ処理されていないため、当然、その時点ではそのキーに対するデータはありません。

次に、loadDialog()いくつかの要素のいずれかがクリックされるたびに同じ関数を呼び出しますが、loadDialog()呼び出されるたびに新しいdivが作成され、キーと値をその新しいdivに関連付けるため"MyDialog"に使用されます。.data()

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

繰り返しになりますが、あなたの質問は明確ではありませんが、これにより、以前に作成されたdivに保存されている値が、個々の要素に関連付けられている値が更新されることを期待しているようです。毎回ダイアログdivを再作成するのはなぜですか?"MyDialog".data()

于 2012-10-02T13:27:29.617 に答える