javascript - Changing Button Text on Text Input - JS, RoR -
i have price range button when clicked open popover. in popover, there 2 input boxes. min rent box , max rent box. once values entered in box price range box display values entered. $2000 $2500. have looked , looked on google , other stackoverflow questions , answers, not sure how accomplish this. appreciated!
erb file:
<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 file:
$('#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(); } });
i think need trigger function change event (keyup) on either of inputs inside popover.
the tricky thing here, @ least me, content of popover dynamically generated, trying assign event handler elements @ page load won't work.
what work assign event handler once elements have been generated.
there events fired popover can assign handler on, , need.
$("[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); }); and modprice can function fix value of price range box. like:
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 + " " + mx); } in there can lot more processing, such making sure max on min, or whatever like.
hope helps!
ps - got popover events w3schools ref page: http://www.w3schools.com/bootstrap/bootstrap_ref_js_popover.asp
pps - , fun, made snippet example, here is:
<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 + " " + mx); $("#listing-price-selector").text(mn + " " + mx); } </script>
Comments
Post a Comment