使用 AJAX 和 JavaScript 在点击时显示模态
Show modal on click using AJAX and JavaScript
在我解析 JSON 并将值放入 TABLE TR 后,显示模态 window 时出现问题。
$('#serviceload').change(function() // on dropdown select change
{
var page = $('#serviceload').val(); // dropdown selection set to page
if(page == "")
{
$('#completeProfile').hide(); // if page is blank, hide content
}
else
{
$.post('api/vesselSearch.php', {page: page}, function(data)
{
var obj = JSON.parse(data); // parse the data
$('#vesselinfo').empty(); // clear previous vessel content
var htmlToInsert = obj.map(function (item)
{
return '<tr><td><a href="#" id="editVesselLink" data-toggle="modal" data-vessel="'+item.VESSEL_NAME+'">Edit</a></td><td>'+item.VESSEL_NAME+'</td></tr>';
});
$('#vesselinfo').html(htmlToInsert); // insert new vessel content
});
$('#completeProfile').show(); // show all content on page
}
});
正如您将在上面看到的,在解析 JSON 之后,我将值显示在 TABLE 行中,该行可能不止 1 行。第一个 TD 单元格包含一个超链接,应该可以打开我的编辑模式。
从行中传输数据并将其显示在模式中的代码如下所示:
$('#editVesselLink').click(function(e)
{
e.preventDefault();
$('#editVesselForm input').val(''); // clear previous values
$vessel= $(this).attr('data-vessel');
$('#editvesselname').val($vessel);
$('#editVesselInfoModal').modal('show'); // show the modal
});
这是我的问题开始的地方。
我不确定将代码放在正上方的什么位置。我把它放在 $('#vesselinfo').html(htmlToInsert);
下面的 $.post
里面,那是我唯一可以打开模式的地方,但仅限于第一条记录。
基本上,当我将第二段代码放在 $.post
中时,我只能让模式打开第一条记录。在我放置代码的任何其他地方,模态根本不会打开。
我试过 $(document).ready(function{});
没用。
我错过了什么?
好的,我认为问题出在:
...
return '<tr><td><a href="#" id="editVesselLink" data-toggle="modal" data-vessel="'+item.VESSEL_NAME+'">Edit</a></td><td>'+item.VESSEL_NAME+'</td></tr>';
...
- 您不能在代码上重复
id
属性,因此,id="editVesselLink"
在哪里放 class="editVesselLink"
,在 $('#editVesselLink')
上放 $('.editVesselLink')
为什么会这样?
- 根据 HTML 对流,id 在 HTML 上必须是唯一的,因此 jQuery 期望仅恢复一个具有该 id 的元素,默认情况下 jQuery 恢复如果重复,首先使用该 ID
在我解析 JSON 并将值放入 TABLE TR 后,显示模态 window 时出现问题。
$('#serviceload').change(function() // on dropdown select change
{
var page = $('#serviceload').val(); // dropdown selection set to page
if(page == "")
{
$('#completeProfile').hide(); // if page is blank, hide content
}
else
{
$.post('api/vesselSearch.php', {page: page}, function(data)
{
var obj = JSON.parse(data); // parse the data
$('#vesselinfo').empty(); // clear previous vessel content
var htmlToInsert = obj.map(function (item)
{
return '<tr><td><a href="#" id="editVesselLink" data-toggle="modal" data-vessel="'+item.VESSEL_NAME+'">Edit</a></td><td>'+item.VESSEL_NAME+'</td></tr>';
});
$('#vesselinfo').html(htmlToInsert); // insert new vessel content
});
$('#completeProfile').show(); // show all content on page
}
});
正如您将在上面看到的,在解析 JSON 之后,我将值显示在 TABLE 行中,该行可能不止 1 行。第一个 TD 单元格包含一个超链接,应该可以打开我的编辑模式。
从行中传输数据并将其显示在模式中的代码如下所示:
$('#editVesselLink').click(function(e)
{
e.preventDefault();
$('#editVesselForm input').val(''); // clear previous values
$vessel= $(this).attr('data-vessel');
$('#editvesselname').val($vessel);
$('#editVesselInfoModal').modal('show'); // show the modal
});
这是我的问题开始的地方。
我不确定将代码放在正上方的什么位置。我把它放在 $('#vesselinfo').html(htmlToInsert);
下面的 $.post
里面,那是我唯一可以打开模式的地方,但仅限于第一条记录。
基本上,当我将第二段代码放在 $.post
中时,我只能让模式打开第一条记录。在我放置代码的任何其他地方,模态根本不会打开。
我试过 $(document).ready(function{});
没用。
我错过了什么?
好的,我认为问题出在:
...
return '<tr><td><a href="#" id="editVesselLink" data-toggle="modal" data-vessel="'+item.VESSEL_NAME+'">Edit</a></td><td>'+item.VESSEL_NAME+'</td></tr>';
...
- 您不能在代码上重复
id
属性,因此,id="editVesselLink"
在哪里放class="editVesselLink"
,在$('#editVesselLink')
上放$('.editVesselLink')
为什么会这样?
- 根据 HTML 对流,id 在 HTML 上必须是唯一的,因此 jQuery 期望仅恢复一个具有该 id 的元素,默认情况下 jQuery 恢复如果重复,首先使用该 ID