我有一个下拉列表,我有jQuery change
函数。
我想根据确认对话框实现所选项目的更改。
如果确认为真,我可以继续进行选定的更改,否则我将现有项目保持为已选中并取消更改事件。
如何使用jQuery实现此功能?
jquery功能
$(function () {
$("#dropdown").change(function () {
var success = confirm('Are you sure want to change the Dropdown ????');
if (success == true) {
alert('Changed');
// do something
}
else {
alert('Not changed');
// Cancel the change event and keep the selected element
}
});
});
要记住change
功能,只有在所选项目发生变化后才能点击
最好考虑在onchange
上实现它 - 但它在jquery中不可用。有没有什么方法可以实现这个?
答案 0 :(得分:37)
好吧,正如Vinu正确指出的那样,jQuery的change
事件仅在select值实际发生变化时触发。你最好做这样的事情:
var prev_val;
$('#dropdown').focus(function() {
prev_val = $(this).val();
}).change(function() {
$(this).blur() // Firefox fix as suggested by AgDude
var success = confirm('Are you sure you want to change the Dropdown?');
if(success)
{
alert('changed');
// Other changed code would be here...
}
else
{
$(this).val(prev_val);
alert('unchanged');
return false;
}
});
答案 1 :(得分:22)
像我在这里做的一样?
http://jsfiddle.net/Swader/gbdMT/
只需在用户点击选择框时立即保存该值,如果onchange确认返回false,则恢复为此值。
以下是我小提琴的代码:
var lastValue;
$("#changer").bind("click", function(e) {
lastValue = $(this).val();
}).bind("change", function(e) {
changeConfirmation = confirm("Really?");
if (changeConfirmation) {
// Proceed as planned
} else {
$(this).val(lastValue);
}
});
答案 2 :(得分:5)
使用以下代码,我已经测试了它及其工作
var prev_val;
$('.dropdown').focus(function() {
prev_val = $(this).val();
}).change(function(){
$(this).unbind('focus');
var conf = confirm('Are you sure want to change status ?');
if(conf == true){
//your code
}
else{
$(this).val(prev_val);
$(this).bind('focus');
return false;
}
});
答案 3 :(得分:0)
下面的代码是针对单选按钮实现的。我认为这个带有微小变化的代码也可以用于下拉。
<input type="radio" class="selected" value="test1" name="test1"
checked="checked" /><label>test1</label>
<input type="radio" name="test1" value="test2" /><label>
test2</label>
<input type="radio" name="test1" value="test3" /><label>
test3</label>
</div>
$("input[name='test1']").change(function() {
var response = confirm("do you want to perform selection change");
if (response) {
var container = $(this).closest("div.selection");
//console.log(container);
//console.log("old sel =>" + $(container).find(".selected").val());
$(container).find(".selected").removeClass("selected");
$(this).addClass("selected");
//console.log($(this).val());
console.log("new sel =>" + $(container).find(".selected").val());
}
else {
var container = $(this).closest("div.selection");
$(this).prop("checked", false);
$(container).find(".selected").prop("checked", true);
}
});
答案 4 :(得分:0)
据我所知你必须亲自处理,这可能会有所帮助:
<select onFocus="this.oldIndex = this.selectedIndex" onChange="if(!confirm('Are you sure?'))this.selectedIndex = this.oldIndex">
答案 5 :(得分:-2)
模糊,聚焦和存储以前的值似乎有点麻烦。我通过将我的监听器不是附加到选项来解决这个问题,而是选择:
$("#id").on('mousedown','option',confirmChange);
然后,
function confirmChange(e){
var value = $(this).val(),
c = confirm('Are you sure you want to change?');
if(c)
$(this).parent().val(value);//can trigger .change() here too if necessary
else
e.preventDefault();
}
当然可以进行优化,但这是一般的想法。