我如何执行一个Ajax模态弹出基于"数据"财产
本文关键字:quot 财产 数据 Ajax 何执行 执行 一个 模态 | 更新日期: 2023-09-27 18:16:30
基本上,我有一个动态创建的列表,我不知道会有多少项。
我需要每一个启动一个稍微不同的Ajax函数点击。
我目前使用JQM模态框(如果有人知道更好的东西,很高兴切换)。
下面的代码可以很好地使所有.ajaxpopup
项启动同一个页面:
$().ready(function () {
$('#dialog').jqm({ ajax: "/QuestionManager/AjaxPopup/1", trigger: ".ajaxpopup" });
$(".ajaxpopup").click(function (e) {
e.preventDefault();
});
然而,我需要每个项目启动一个不同的页面(1/2…我事先不知道ID)。
我真的很喜欢Adam关于在元素中添加data-itemid
标签的回答,但是,我似乎真的不能使这个工作。
我不知道这是JQM的限制还是由于它的启动方式。
我最接近的是:
$(document).on("click", "a", function () {
var itemId = $(this).data("itemid");
$('#dialog').jqm({ ajax: "/QuestionManager/AjaxPopup/"+itemId, trigger: ".ajaxpopup" });
});
我也用alert(itemId)
代替了对话行,这是给出正确的结果,所以,我知道我沿着正确的道路走-我似乎无法完成这项工作!
有人能帮忙吗?
您可以通过jQuery的live
和on
函数动态地连接添加的内容以响应事件。
如果我理解你的特殊情况,你希望这些文本节点,当点击时,启动jqm模态?你想让模型的itemId成为它的一部分吗?
首先,通过data属性将itemId添加到文本中:
@foreach (var item in Model.Routines)
{
<text data-itemid='@item.itemId'></text>
} //(sorry if the razor syntax is off a bit - that's not my expertise
然后:
$(document).on("click", "text", function() {
var itemId = $(this).data("itemid");
var textnodeText = $(this).text();
$('#dialog').jqm({ ajax: "/QuestionManager/_AjaxCreateQuestionInitial/" + textnodeText,
trigger: itemId });
});
编辑
根据你的评论,如果你有这个html:<a href="/test/AddData" data-itemid="1">Add Data</a>
你可以这样处理点击事件:
$(document).on("click", "a", function() {
var itemId = $(this).data("itemid");
//now run your ajax call
});
为什么不在控制器上创建一个JsonResult提供Action,它将提供您需要的项目列表?一旦这一切就绪,我将遍历JSON数组并生成框。
假设您的数据将是(一个示例-这需要由您的控制器生成)
var data = [
{"Id": 1, "Name": "A"},
{"Id": 2, "Name": "B"},
{"Id": 3, "Name": "C"}
];
你的javascript (jquery)循环处理你的方框将是
$.each(data, function(i, item) {
//replace with your dialog code
alert(data[i].Id+" "+data[i].Name);
});