【问题标题】:What is wrong with this jquery statement.?这个 jquery 语句有什么问题。?
【发布时间】:2012-10-18 02:19:52
【问题描述】:

我有以下代码。一切似乎都运行良好,但只是有时,确认和警报通知会出现多次,而且它们会变得过于烦人。下面的代码有没有问题。感谢您的任何建议。

    $('.order_stateselect').hover(function(){
        var value_text=$(this).find(":selected").text();
        var value_code=$(this).find(":selected").val();
        $(this).change(function(){
            if(confirm('Confirm Order Status Change?')){
                var conduct_status_chge=$.post('/seller/helpers/order_status_change.php',{order_item_id:$(this).parent('td').siblings('.order_item_id').text(),order_item_status:$(this).find(':selected').val()},function(data){
                    alert(data);
                })
                .error(function() {
                    $(this).find(':selected').removeAttr('selected');
                    $(this).find('option:contains(value_code)').attr('selected','selected');
                    alert('error');

                });
            }else{
                $(this).find(':selected').removeAttr('selected');
                $(this).find('option:contains(value_code)').attr('selected','selected');
            }
        });
    });

简要说明我在这里做什么。

这是一个带有多个选项的选择框。此选择框是项目列表中表格单元格的一部分。

ie:意味着每一行都包含一个项目,并且对于每一行,都有一个专用于该特定行的选择框。

1) 悬停时,我会在页面加载时通过我的数据库值加载所选选项的值。

2) 当用户从选择框中选择不同的值并确认选择时,我会执行 $.post。

3) 如果用户按下取消键或脚本调用出错导致 $.post 失败,我将所选选项恢复为数据库中的原始值。

如果我的解释有点不清楚,我很抱歉,但如果你们需要更多信息,请告诉我。谢谢。

【问题讨论】:

  • 我认为问题在于您在“悬停”中多次将事件分配给“.order_stateselect”。为什么你需要“悬停”?尝试将所有代码放在“更改”事件中。

标签: php javascript jquery ajax dialog


【解决方案1】:

我将从您的代码中摘录一小段:

$('.order_stateselect').hover(function(){
    var value_text=$(this).find(":selected").text();
    var value_code=$(this).find(":selected").val();
    $(this).change(function(){

当鼠标光标进入该区域时,您正在附加一个更改处理程序;如果这种情况发生多次,您的更改处理程序也会被多次应用。

您应该将.change(...) 移到.hover() 之外:

$('.order_stateselect')
    .hover(function() { ... })
    .change(function() { ... })

【讨论】:

  • 嗯。这是行不通的,如果我将两者分开,我将无法恢复到原来的值。 value_text 和 value_code 都将变得无用,因为它们无法获得我需要的值。
  • @Lawrence 简单,只需使用.data() 添加之前选择的值;然后,在.change() 中,如果用户确认,您可以引用这些值并更新它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多