更改文本输入上的按钮文本- JS, RoR
Changing Button Text on Text Input - JS, RoR
我有一个Price Range
按钮,当点击将打开一个弹出窗口。在弹出窗口中,有两个输入框。一个Min Rent
盒和一个Max Rent
盒。一旦在该框中输入了值,我希望Price Range
框现在显示先前输入的值。比如$2000 to $2500
。我看了又看了谷歌和其他StackOverflow的问题和答案,但我不确定如何做到这一点。任何帮助将非常感激!
Erb文件:
<div class="col-md-2 col-xs-6">
<a tabindex="0" class="button btn-transparent" id="listing-price-selector" role="button" data-toggle="popover">Price Range <span class="caret"></span></a>
</div>
<div id="listing-price-content" style="display: none;">
<div class="container-fluid">
<div class="row">
<div class="col-xs-6">
<div class="input-group input-group-sm">
<span class="input-group-addon" id="basic-addon1">$</span>
<%= f.text_field :min_price, class: "form-control", placeholder: "Min Rent", data: { "binding-name" => "min-price" } %>
</div>
</div>
<div class="col-xs-6">
<div class="input-group input-group-sm">
<span class="input-group-addon" id="basic-addon1">$</span>
<%= f.text_field :max_price, class: "form-control", placeholder: "Max Rent", data: { "binding-name" => "max-price" } %>
</div>
</div>
</div>
</div>
</div>
JS文件:
$('#listing-price-selector').popover( {
html: true,
trigger: 'manual',
placement: 'bottom',
template: '<div class="popover price-range-pop" role="tooltip"><div class="arrow"></div><div class="popover-content"></div></div>',
content: function() {
return $('#listing-price-content').html();
}
});
我认为您需要的是在弹出窗口内的任何一个输入上触发一个更改事件(keyup)的函数。
这里的棘手之处在于,至少对我来说,弹出窗口的内容是动态生成的,所以试图在页面加载时为这些元素分配事件处理程序是行不通的。
真正起作用的是在这些元素生成后分配事件处理程序。
有一些事件是为弹出窗口本身触发的,你可以为它们分配一个处理程序,这将使你得到你需要的。
$("[data-toggle='popover']").on('shown.bs.popover', function(){
$("#listing-price-selector").next().find("#min-price").keyup(modPrice);
$("#listing-price-selector").next().find("#max-price").keyup(modPrice);
});
和modPrice可以是一个函数来固定价格范围框的值。比如:
function modPrice(){
var mn = $("#listing-price-selector").next().find("#min-price").val();
var mx = $("#listing-price-selector").next().find("#max-price").val();
mn = (mn == "") ? 0 : mn;
mx = (mx == "") ? 0 : mx;
$("#listing-price-selector").text(mn + " to " + mx);
}
在这里你可以做更多的处理,比如确保max大于min,或者任何你喜欢的。
希望这对你有帮助!
PS -从W3Schools ref page: http://www.w3schools.com/bootstrap/bootstrap_ref_js_popover.asp获得弹出窗口事件
PPS -为了好玩,我做了一个片段示例,如下:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="col-md-2 col-xs-6">
<a tabindex="0" class="button btn-transparent" id="listing-price-selector" role="button" data-toggle="popover">Price Range <span class="caret"></span></a>
</div>
<div class="input-group input-group-sm">
<span class="input-group-addon" id="basic-addon1">$</span>
<input type="text" id="priceBox" />
</div>
<div id="listing-price-content" style="display: none;">
<div class="container-fluid">
<div class="row">
<div class="col-xs-12">
<div class="input-group input-group-sm">
<label>Min</label>
<span class="input-group-addon" id="basic-addon1">$</span>
<input type="text" id="min-price" />
</div>
</div>
<div class="col-xs-12">
<div class="input-group input-group-sm">
<label>Max</label>
<span class="input-group-addon" id="basic-addon1">$</span>
<input type="text" id="max-price" />
</div>
</div>
</div>
</div>
</div>
<script>
$('#listing-price-selector').popover( {
html: true,
trigger: 'click',
placement: 'bottom',
template: '<div class="popover price-range-pop" role="tooltip"><div class="arrow"></div><div class="popover-content"></div></div>',
content: function() {
return $('#listing-price-content').html();
}
});
$("[data-toggle='popover']").on('shown.bs.popover', function(){
$("#listing-price-selector").next().find("#min-price").keyup(modPrice);
$("#listing-price-selector").next().find("#max-price").keyup(modPrice);
});
$("[data-toggle='popover']").on('hide.bs.popover', function(){
modPrice();
});
function modPrice(){
var mn = $("#listing-price-selector").next().find("#min-price").val();
var mx = $("#listing-price-selector").next().find("#max-price").val();
mn = (mn == "") ? 0 : mn;
mx = (mx == "") ? 0 : mx;
$("#priceBox").val(mn + " to " + mx);
$("#listing-price-selector").text(mn + " to " + mx);
}
</script>
相关文章:
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- Sails.js:同时发布文本输入和一个文件
- 使用D3.js计算带有字母间距的文本长度
- JS中的按钮和文本输入
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- 复选框与文本内联-JS问题
- 在highcharts.js中向点弹出窗口动态添加文本
- 使用JS从选择和文本输入中捕获值,并将输出返回到HTML
- php&js-将电子邮件添加到输入文本中
- 当运行JS函数时,如何在c#中的Edgejs中获取错误文本
- Angular JS-文本框未在独立范围内更新
- 使用D3.js和GeoJson在地图上显示States上的一些文本
- 如何将图像放入我的滚动文本js中
- 如何使用拉斐尔缩放文本.js
- Twitter文本js,不根据包含带#的URL的文本计算长度
- 检查DOM元素和子元素是否包含任何文本[JS或jQuery]
- 更改文本输入上的按钮文本- JS, RoR
- 无法检索按钮文本JS/Jquery
- 无法使用 html 表单和信息框显示默认文本.js