jQuery – 取消下拉列表的确认对话框中的更改事件
我有一个下拉列表,我有jQuery change
function。
我想根据确认对话框实现所选项目的更改。
如果确认为真,我可以继续选择更改,否则我将现有项目保持为已选中并取消更改事件。
我如何用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中不可用。 有没有办法实现这个?
好吧,正如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; } });
像我在这里做的一样?
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); } });
使用以下代码,我已经测试了它和它的工作
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; } });
下面的代码是针对单选按钮实现的。我认为这个带有微小变化的代码也可以用于下拉。
$("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); } });
据我所知你必须自己处理,这可能有所帮助:
模糊,聚焦和存储以前的值似乎有点麻烦。 我通过将我的监听器不是附加到选项来解决这个问题,而是选择:
$("#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(); }
当然可以进行优化,但这是一般的想法。