如何防止我的jquery颜色选择器在某些情况下设置所选颜色?

How do I prevent my jquery colorpicker from setting the selected color under certain conditions?

提问人:gib65 提问时间:11/15/2023 更新时间:11/15/2023 访问量:14

问:

我们正在开发一个使用 JQuery 的 colorPicker 的 AngularJS 应用程序。下面是颜色选取器的代码:

$('#c' + driver.nodeId + '_' + driver.measurementGroupId).ColorPicker({
    pickerDefault: driver.color,
    colors: AppSettings.OptionalPalette,
    transparency: true,
    onColorChange: function(dummy, color) {
        driverColorChanged(driver, color);
    }
});

我们希望阻止用户选择已为其他驱动程序选择的颜色。因此,我实现了以下代码,当所选颜色与现有颜色匹配时,该代码在 driverColorChanged() 中运行:

var colorMatch = false;
_.forEach($scope.drivers, function(d) {
    if (!(d.locationId === driver.locationId && d.measurementGroupId === driver.measurementGroupId)) {
        colorMatch = d.color === color;
        if (colorMatch) return false;
    }
});

if (colorMatch) {
    var colorPickerHandle = document.querySelector('#c' + driver.nodeId + '_' + driver.measurementGroupId);
    var colorPicker = colorPickerHandle.nextElementSibling;
    colorPicker.style.backgroundColor = driver.color;

    $modal.open({
        templateUrl: 'template/modal/messageModal.html',
        size: "sm",
        controller: function($scope, $modalInstance){
            $scope.Header = $filter('translate')('CEBM_DRIVER_COLOR_TAKEN_TITLE');
            $scope.Message = $filter('translate')('CEBM_DRIVER_COLOR_TAKEN_MSG');
            $scope.ok = function(){
                $modalInstance.close();
            };
        }
    });
}

这适用于使用模式警告用户已选择颜色,但使用 将颜色选取器设置回原始颜色时不起作用。准确地说,如果我在该行上放置一个断点并运行它,我会看到颜色改回原始颜色,但是当我让它运行时,我看到颜色被设置回用户选择的颜色(就像颜色选择器试图覆盖我的 backgroudColor 的编程设置一样)。colorPicker.style.backgroundColor = driver.color

所以我的问题是:我怎样才能告诉颜色选择器不要将颜色设置为用户选择的颜色?有没有另一个钩子我可以使用,喜欢或类似的东西?您将如何处理防止在特定条件下设置颜色?beforeColorChange

javascript jquery 子颜色选择器

评论


答: 暂无答案