0

当值为空时,我有以下 jQuery 代码来禁用表单中的提交按钮。该代码适用于所有条目,除了.action_manager(这是textarea在表中动态生成的),其中仅填充第一行,启用按钮。我希望在重新激活之前填写所有字段submitbutton只有一个实例action_manager就足以启用按钮(这不是我想要的)

 $('document').ready(function(){

        var submitButton = $('input[name="store_values"]');
        checkValues();

        $('select.actuallevel').on('change',function(){
            checkValues();
        });
        $('select.targetlevel').on('change',function(){
                checkValues();
            });
        $('select.quarter_manager').on('change',function(){
            checkValues();
        });
        $('select.year_manager').on('change',function(){
            checkValues();
        });

        $(".action_manager").each(function()
        {
           $(this).on('change',function(){
                checkValues();
          });
        });


        function checkValues(){
            submitButton.prop('disabled',$(".actuallevel > option:selected[value=''],.actuallevel:empty").length > 0 ||
                $(".targetlevel > option:selected[value=''],.targetlevel:empty").length > 0 ||
                $(".quarter_manager > option:selected[value=''],.quarter_manager:empty").length > 0 ||
                $(".year_manager > option:selected[value=''],.year_manager:empty").length > 0 ||
                !$.trim($(".action_manager").val())


            );
            //submitButton.prop('disabled',$(".targetlevel > option:selected[value=''],.targetlevel:empty").length > 0);
        }
    });

textarea 字段如下:

echo "<td><textarea class='action_manager' id='action-".$inf['Competence_ID']."' name='acto-".$inf['Competence_ID']."'>";if (isset($inf['actiontext'])){echo $inf['actiontext'];}echo "</textarea></td>";
    echo"<td>";
4

2 回答 2

1

鉴于您已动态插入 .action_manager 文本区域,因此在加载文档时它们不存在。因此,您附加到 .action_manager textareas 的事件对于新的 textareas 将无效。

这是将事件附加到新旧 .action_manager 文本区域的正确方法:

   $(document).on('change','.action_manager',function(){
        checkValues();
  });

编辑答案:

请改用以下函数

        function checkValues(){
            var action_managerfilled = true;
            $(".action_manager").each(function(){
               if (!$.trim($(this).val())){
                    action_managerfilled = false;
                    return false;
               } 
            });
            submitButton.prop('disabled',$(".actuallevel > option:selected[value=''],.actuallevel:empty").length > 0 ||
                $(".targetlevel > option:selected[value=''],.targetlevel:empty").length > 0 ||
                $(".quarter_manager > option:selected[value=''],.quarter_manager:empty").length > 0 ||
                $(".year_manager > option:selected[value=''],.year_manager:empty").length > 0 ||
                !action_managerfilled
            );
            //submitButton.prop('disabled',$(".targetlevel > option:selected[value=''],.targetlevel:empty").length > 0);
        }

似乎 $('.action_manager').val() 在所有情况下都只返回第一个 textarea 的值,而不是检查类 '.action_manager' 的每个 textarea 的值;因此上面的 .each() 函数可以解决这个问题。

于 2013-04-19T11:42:38.967 回答
0

您需要对动态生成的元素on使用委托事件..并且您不需要在这里使用循环,选择器选择以该类开头的所有元素...$.each

$(document).on('change','.action_manager',function(){
     checkValues();
});

但是,建议使用文档中存在的最接近的静态父级而不是document自身

于 2013-04-19T11:40:42.953 回答