我遇到了一个奇怪的bootstrap popover问题。在我的页面中,我有2个带有按钮的文本框,可打开一个弹出框。 Popover有一个输入框,当数据输入到popover中的文本框中时,需要将值发送回打开popover的父文本框。
在此之前一切正常,但是当我点击提交我在弹出框中输入的值时,相同的值会添加到页面中的两个文本框中。以下是代码:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$('.showPopover').popover({
html: true,
placement: "bottom",
title: function () {
return $("#popover-head").html();
},
content: function () {
return $("#popover-content").html();
}
});
$('.showPopover').click(function () {
var cTextBox = '#' + $(this).prev().attr("id");
$('#hdnCalculatefteFor').val(cTextBox);
});
$(document).on("click", ".close", function () {
$(".showPopover").popover('hide');
});
$(document).on("click", ".getData", function () {
var ctl = $('#hdnCalculatefteFor').val();
var ctlInput = $('#input1').val();
$(ctl).val(ctlInput);
});
});
</script>
<div class="row">
<div class="col-md-2">
<div id="div1" class="form-group">
<label class="required">Text Box 1</label>
<div class="input-group">
<asp:TextBox ID="txt1" runat="server" class="form-control" ClientIDMode="Static"></asp:TextBox>
<span id="s1" style="cursor:pointer;" class="form-control showPopover" >
<i class="icon-list"></i>
</span>
</div>
</div>
</div>
<div class="col-md-2">
<div id="div2" class="form-group">
<label class="required">Text Box 2</label>
<div class="input-group">
<asp:TextBox ID="txt2" runat="server" class="form-control" ClientIDMode="Static"></asp:TextBox>
<span id="s2" style="cursor:pointer;" class="form-control showPopover">
<i class="icon-list"></i>
</span>
</div>
</div>
</div>
</div>
<asp:HiddenField ID="hdnCalculatefteFor" ClientIDMode="Static" runat="server" />
<div id="popover-head" class="hide" >
Test
<button type="button" class="close" data-dismiss="popover" aria-hidden="true">×</button>
</div>
<div id="popover-content" class="hide">
<input type="text" id="input1" />
<button type="button" id="btn" class="getData" value="Get"></button>
</div>
有关如何解决此问题的任何建议?
谢谢, 纳文
答案 0 :(得分:0)
执行此操作时:
$('.showPopover').popover({...
您正在使用类showPopover
为每个元素创建一个弹限窗口。哪个可能没问题,但是因为你正在重新生成内容,特别是输入元素,你会得到它们的重复。因此,如果您运行代码并查看生成的源代码,您会看到2 x input
带有id="input1"
。因此,您会遇到交叉污染目的地的问题。
修复方法是为每个弹出框提供单独的内容,或者让按钮的onclick
事件获取最近输入的值以查找要填充的数据。
例如:
var ctlInput = $(this).siblings("#input1").val();
这是一个代码库,展示了:http://codepen.io/simoncowie/pen/lyGoK