引导弹出框更新内容
bootstrap popover update content
在 ajax 成功后,您如何更新引导弹出窗口的内容,我特别需要更改我拥有的输入字段的值,但是一旦我关闭弹出框并单击它,输入字段的原始值就会出现? 有人可以帮助我吗?
<button class="btn btn-primary edit" data-content='<input type="text" id="name" value="some value">
<button class="btn btn-primary save">Save</button>'>Edit</button>
JavaScript:
$('.edit').popover({
placement: 'left',
html: true,
});
$('body').on("click", ".save", function() {
var name = $('#name').val();
$.ajax({
type: "POST",
url: "test.php",
data: {
name: name
},
cache: false,
success: function(response) {
if (response.indexOf("success") != -1) {
$('#name').val(name);
$('.edit').popover('hide').next('.popover').remove();
}
}
});
});
保存数据后,弹出窗口将关闭,当我再次单击编辑时,旧值显示在输入框中。
请找到随附的弹出窗口的工作演示,该演示将使用 ajax 请求的响应进行更新。
我删除了您的请求参数,只是为了让演示能够使用 mocky.io 执行请求。
诀窍是使用.attr('value', text)
而不是.val(text)
。我不太确定这里发生了什么。也许有人可以解释为什么这是不同的。但是使用 attr,它会更改弹出窗口并且可以工作。
需要的另一件事是重新创建弹出框。我也想摧毁第一个弹出窗口,但这不起作用。所以我再次创建了相同的弹出窗口。
你也可以在jsFiddle找到相同的代码。
SO 的代码中存在一个错误。如果从服务器获取数据,然后关闭弹出框,则数据将重置为初始值。
不知道出了什么问题,因为它可以在jsFiddle上工作,而没有那个错误。
更新 04.12.2014:
我对代码进行了一些改进。现在,弹出窗口中有一个关闭按钮,并且存储了数据,因此当弹出窗口重新打开时,来自服务器的数据仍然可用。
上面提到的错误可能不是SO问题,这是因为来自服务器的数据未正确存储。现在也已修复。
我还删除了演示中一些不需要的脚本标签,因为工具提示和弹出框已经包含在引导程序 3 中。
更新 05.12.2014:
我对代码有另一个改进。线路$(this).parent().find('.close').click(...)
不像我想要的那样工作。我只想将处理程序添加到当前弹出框的关闭按钮。但它将其添加到所有具有类 .close
的元素中。因为 $(this(.parent(( 是 body 元素。我认为最好这样做:
var current_popover = '#' + $(e.target).attr('aria-describedby');
var $cur_pop = $(current_popover);
$cur_pop.find('.close').click({});
使用aria-describedby
您将获得当前弹出框的ID,然后可以找到该弹出框的关闭按钮。
$(function () {
var editData = 'new value';
var doPopover = function (item, text) {
$('#name').attr('value',text); // use set attr and not val()
//$('#name').val(text); //<<<< not working here doesn't set DOM properly
var $pop = $(item);
$pop.popover({
placement: 'right',
title: 'edit <a class="close" href="#">×</a>',
trigger: 'click',
html: true,
content: function () {
return $('#popup-content').html();
}
}).on('shown.bs.popover', function(e) {
// console.log('triggered');
// 'aria-describedby' is the id of the current popover
var current_popover = '#' + $(e.target).attr('aria-describedby');
var $cur_pop = $(current_popover);
$cur_pop.find('.close').click(function(){
//console.log('close triggered');
$pop.popover('hide');
});
});
return $pop;
};
// enable popover
doPopover('.edit', editData);
// edit button click handler to show popover
$('.edit').click(function() {
doPopover('.edit', editData);
});
$('body').on("click", ".save", function (e) {
e.preventDefault();
var name = $('#name').val();
//console.log($popover);
$.ajax({
type: "GET", //"POST",
url: "http://www.mocky.io/v2/547f86501713955b0a8ed4da", //"test.php",
data: {
//name: name
},
cache: false,
success: function (response) {
editData = response.data;
doPopover('.edit', editData);
console.log('response: ', editData);
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<button class="btn btn-primary edit" data-html="true" data-toggle="popover" class="edit" data-title="Edit">Edit</button>
<div id="popup-content" class="hide">
<input type="text" id="name" value="some value" />
<button class="btn btn-primary save">Save</button>
</div>
- 仅当javascript的新内容出现时,才每3秒更新一次javascript
- 如何在Ajax加载新内容时停止JavaScript执行
- 点击后,永久更改内容;悬停时,简要显示新内容
- 导致出现新内容块的标记(谷歌地图)
- CSS转换后用新内容替换空白
- 当用户到达页面右侧时加载新内容
- 使用原型更新表内容时出错
- JQuery:更新表内容花费的时间太长
- 如何使用jQuery显示新内容
- 使用 Javascript 在页面末尾附加新内容
- 使用不同的API参数更新DIV内容
- jQuery弹出显示旧内容,而不是新内容
- JSON加载新内容后访问元素
- 加载新内容时调整iframe的高度
- 在节点脚本中,如何监视文件的更改并获取更新的内容
- Webgrid需要使用MVC中的新内容进行更新
- 如何检查表中的新内容,然后更新浏览器选项卡标题
- 在创建/更新时,使用$state.go('main.myEntries'),但直到重新加载更新或新内容为
- 在更新地址字段时导航到新内容而不重新加载页面
- 当最小化页面上出现新内容时,如何更新选项卡的标题?