如何限制单选按钮的选择一次
How to restrict selection of radio button to one time
我试图限制这个jsfiddle中的多重计数。因此,一旦我通过选择一个单选按钮进行了评级,我就希望存储这些信息,这样计数器就不会添加更多的"费率"。我怎样才能限制和平计数器只上一次?
HTML:<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p>
<input type="radio" name="rating" id="star5" value="5" />
<label for="star5"></label>
<input type="radio" name="rating" id="star4" value="4">
<label for="star4"></label>
<input type="radio" name="rating" id="star3" value="3" />
<label for="star3"></label>
<input type="radio" name="rating" id="star2" value="2">
<label for="star2"></label>
<input type="radio" name="rating" id="star1" value="1" />
<label for="star1"></label>
</p>
<span class="rate">Rate! (62)</span>
</div>
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p>
<input type="radio" name="rating" id="star5" value="5" />
<label for="star5"></label>
<input type="radio" name="rating" id="star4" value="4">
<label for="star4"></label>
<input type="radio" name="rating" id="star3" value="3" />
<label for="star3"></label>
<input type="radio" name="rating" id="star2" value="2">
<label for="star2"></label>
<input type="radio" name="rating" id="star1" value="1" />
<label for="star1"></label>
</p>
<span class="rate">Rate! (20)</span>
</div>
JS:
$('.stars input:radio').click(function() {
str_rate = $(this).closest('div').find('span.rate');
var rate_string = $(str_rate).text();
var rate = parseInt(rate_string.substring(rate_string.indexOf("(") + 1,rate_string.indexOf(")")),10) + 1;
$(str_rate).text("Rate! (" + rate + ")");
});
jsfiddle: http://jsfiddle.net/mgvto6k1/10/
您可以通过在单击处理程序的末尾添加$("input", $(this).parents("div")).attr("disabled", true);
行来禁用此无线电。
但是,这种方式是不安全的!任何人都可以重新启用单选按钮(或重新附加事件),您也应该添加一些服务器端检查。
$('.stars input:radio').click(function() {
str_rate = $(this).closest('div').find('span.rate');
var rate_string = $(str_rate).text();
var rate = parseInt(rate_string.substring(rate_string.indexOf("(") + 1, rate_string.indexOf(")")), 10) + 1;
$(str_rate).text("Rate! (" + rate + ")");
$("input", $(this).parents("div")).attr("disabled", true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p>
<input type="radio" name="rating" id="star5" value="5" />
<label for="star5"></label>
<input type="radio" name="rating" id="star4" value="4">
<label for="star4"></label>
<input type="radio" name="rating" id="star3" value="3" />
<label for="star3"></label>
<input type="radio" name="rating" id="star2" value="2">
<label for="star2"></label>
<input type="radio" name="rating" id="star1" value="1" />
<label for="star1"></label>
</p>
<span class="rate">Rate! (62)</span>
</div>
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p>
<input type="radio" name="rating" id="star5" value="5" />
<label for="star5"></label>
<input type="radio" name="rating" id="star4" value="4">
<label for="star4"></label>
<input type="radio" name="rating" id="star3" value="3" />
<label for="star3"></label>
<input type="radio" name="rating" id="star2" value="2">
<label for="star2"></label>
<input type="radio" name="rating" id="star1" value="1" />
<label for="star1"></label>
</p>
<span class="rate">Rate! (20)</span>
</div>
如果单选按钮被选中,您需要确保您的事件仅触发。我将你的代码修改如下:(http://jsfiddle.net/mgvto6k1/7/)
$('input:radio[name="rating"]').change(
function(){
if ($(this).is(':checked')) {
str_rate = $(this).closest('div').find('span.rate');
var rate_string = $(str_rate).text();
var rate = parseInt(rate_string.substring(rate_string.indexOf("(") + 1,rate_string.indexOf(")")),10) + 1;
$(str_rate).text("Rate! (" + rate + ")");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p><input type="radio" name="rating" id="star5" value="5" /><label for="star5"></label><input type="radio" name="rating" id="star4" value="4"><label for="star4"></label><input type="radio" name="rating" id="star3" value="3" /><label for="star3"></label><input type="radio" name="rating" id="star2" value="2"><label for="star2"></label><input type="radio" name="rating" id="star1" value="1" /><label for="star1"></label>
</p>
<span class="rate">Rate! (62)</span>
</div>
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p><input type="radio" name="rating" id="star5" value="5" /><label for="star5"></label><input type="radio" name="rating" id="star4" value="4"><label for="star4"></label><input type="radio" name="rating" id="star3" value="3" /><label for="star3"></label><input type="radio" name="rating" id="star2" value="2"><label for="star2"></label><input type="radio" name="rating" id="star1" value="1" /><label for="star1"></label>
</p>
<span class="rate">Rate! (20)</span>
</div>
如果我认为我理解你的问题,你想只增加计数器一次每一行复选框?选中复选框后,您将希望解除对单击处理程序的绑定。我在提供的代码片段
中进行了更改$('.stars input:radio').click(function () {
str_rate = $(this).closest('div').find('span.rate');
var rate_string = $(str_rate).text();
var rate = parseInt(rate_string.substring(rate_string.indexOf("(") + 1, rate_string.indexOf(")")), 10) + 1;
$(str_rate).text("Rate! (" + rate + ")");
$(this).siblings('input').unbind('click');
});
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p>
<input type="radio" name="rating" id="star5" value="5" />
<label for="star5"></label>
<input type="radio" name="rating" id="star4" value="4">
<label for="star4"></label>
<input type="radio" name="rating" id="star3" value="3" />
<label for="star3"></label>
<input type="radio" name="rating" id="star2" value="2">
<label for="star2"></label>
<input type="radio" name="rating" id="star1" value="1" />
<label for="star1"></label>
</p> <span class="rate">Rate! (62)</span>
</div>
<div class="stars float-left">
<div class="rating" style="width:99%"></div>
<p>
<input type="radio" name="rating" id="star5" value="5" />
<label for="star5"></label>
<input type="radio" name="rating" id="star4" value="4">
<label for="star4"></label>
<input type="radio" name="rating" id="star3" value="3" />
<label for="star3"></label>
<input type="radio" name="rating" id="star2" value="2">
<label for="star2"></label>
<input type="radio" name="rating" id="star1" value="1" />
<label for="star1"></label>
</p> <span class="rate">Rate! (20)</span>
</div>
一旦用户做出决定,你可以禁用单选按钮组
所以你的代码现在看起来像:$('.stars input:radio').click(function() {
str_rate = $(this).closest('div').find('span.rate');
var rate_string = $(str_rate).text();
var rate = parseInt(rate_string.substring(rate_string.indexOf("(") + 1,rate_string.indexOf(")")),10) + 1;
$(str_rate).text("Rate! (" + rate + ")");
$(this).siblings().attr("disabled", "true");
});
看看更新的fiddle如果这是你所寻找的,你只需要禁用单选按钮后的比率,所以像这样的用户可以只评级一次,添加以下代码:
$(this).siblings().attr("disabled", "disabled");
完整JS:
$('.stars input:radio').click(function() {
str_rate = $(this).closest('div').find('span.rate');
var rate_string = $(str_rate).text();
var rate = parseInt(rate_string.substring(rate_string.indexOf("(") + 1,rate_string.indexOf(")")),10) + 1;
$(str_rate).text("Rate! (" + rate + ")");
$(this).siblings().attr("disabled", "disabled");
});
相关文章:
- 根据Angular.JS上一次的内容禁用选择
- 在一组复选框中,一次只允许选择一个
- Jquery选择选项并获取只工作一次的更改值(页面加载时)
- 我如何可以忽略以前的选择,只写最后一次选择
- 在angularjs中一次选择一个项目
- 一次选择一个图像
- 无法在一次选择中选择多个值
- 如何使用 jQuery 选择多个文件.多文件.js插件?使用单个关闭按钮一次选择多个文件
- Javascript 一次选择所有单选按钮
- Javascript一次选择一行
- 使用下拉列表一次选择一个图表
- 在“选择将打开选项卡更改为新url”上.但是,如果在下一次选择更改时关闭了选项卡,该怎么办
- 使用一个文件元素上传多个文件(没有多个选项).并一次选择一个文件
- Highcharts一次选择多个点
- 如何将一次选择的更改事件的数据附加到第二次选择
- Jquery一次选择所有选中和选中的元素
- 如何一次选择数组中的所有项目,并为它们添加类
- 在angularjs中,如何在不使用单选按钮的情况下一次选择一个复选框
- 一次选择多个数组元素
- 使复选框可以像单选按钮一样一次选择一个