Skip to main content
 首页 » 编程设计

c#之扩展程序(MaskEdit + Validator)的 ajax textBox-watermark 问题之设置自定义默认值

2024年01月01日41shanyou

我正在尝试为“TBXinsertDate”asp:TextBox 控件设置一个默认值,
通过使用 focus 事件 (js) ,虽然...在我看来 ajax watermark Extender 实际上 用它自己的操作覆盖我的操作,如果这是问题所在,

我如何设置自己的默认值?

aspx

<cc1:TextBoxWatermarkExtender  ID="insertDate_TextBoxWatermarkExtender" runat="server" TargetControlID="TBXinsertDate" WatermarkText="insertDate" WatermarkCssClass="WaterMarkedTextBox"> 
</cc1:TextBoxWatermarkExtender> 
 
<cc1:MaskedEditExtender enabled="true" MaskType="Date" ID="insertDate_MaskedEditExtender" runat="server" BehaviorID="tet" 
                                TargetControlID="TBXinsertDate"  InputDirection="LeftToRight"  CultureName="en-GB"  
                                UserDateFormat="None" Mask="99/99/9999" MessageValidatorTip="true"  OnFocusCssClass="maskedFocus" ErrorTooltipEnabled="true" ErrorTooltipCssClass="toolTipForInvalid"> 
</cc1:MaskedEditExtender> 
 
<asp:TextBox ID="TBXinsertDate" runat="server" ToolTip="please insert date" Width="76px"> 
                        </asp:TextBox> 

我知道,我可以使用任何类型的 datePicker ...,但要求如前所述,通过键盘手动设置。

更新

默认应该是今天的日期,比如...26/12/2012

更新#2代码

下面是:Javascript+Ajax双模WaterMark

更新 3 和最重要的更新:

1) this Js code 不是我的问题的特殊之处......它甚至不是它的来源

2) 如果我省略 Ajax Extenders 则问题不存在:validation + maskEdit 来自 ASPX!

3) 总结一下,问题是设置默认值=今天日期

如果我不添加扩展器 - validator + Maskedit 我的尝试工作正常!值已设置。

请有Ajax Toolkit经验的人在这里提供一点帮助。

我也会更新这个问题的标题

    var masked = "__/__/____"; 
    var MultiWatermark = function (obj, options) { 
 
        var defaultOptions = { 
            // These variables can be changed to alter functionality using the passed in options object 
            watermarkVals: ["insert date", "mmddyyyy"], // all watermark values. 
            totalIterations: 20, // how many times to go through watermark Array. 
            watermarkClassName: "WaterMarkedTextBox", 
            normalClassName: "NormalTextBox", 
            changeDelay: 1000, // in milliseconds 
            extraValsToCheck: ['', null]//  
        } 
 
        //merge options with defaultOptions 
        for (var property in defaultOptions) { 
            if (!options.hasOwnProperty(property)) { 
                options[property] = defaultOptions[property]; 
            } 
        } 
 
        // local variables (do not change) 
        var textBox = obj; 
        var iterationCounter = 0; 
        var itemCounter = 0; 
        var intrId; 
 
        var startWatermark = function () { 
            itemCounter = 0; iterationCounter = 0; // resets for after blur 
            intrId = setInterval(function () { alterWaterMark() }, options.changeDelay); 
        } 
 
        var stopWatermark = function () { 
            clearInterval(intrId); 
        } 
 
        var alterWaterMark = function () { 
 
            if (iterationCounter < options.totalIterations) { 
 
                textBox.value = options.watermarkVals[itemCounter]; 
                itemCounter += 1; 
                if (itemCounter == options.watermarkVals.length) { 
                    itemCounter = 0; 
                    iterationCounter += 1; 
                } 
 
            } 
            else { 
                stopWatermark(); 
            } 
 
        } 
 
        var isWatermarkValue = function (val) { 
 
            var i = options.watermarkVals.length; 
            while (i--) { 
                if (options.watermarkVals[i] === val) { 
                    return true; 
                } 
            } 
            // value is not in watermark array, so check secondary values. 
            i = options.extraValsToCheck.length; 
            while (i--) { 
                if (options.extraValsToCheck[i] === val) { 
                    return true; 
                } 
            } 
        } 
 
        var setClass = function () { 
            textBox.className = isWatermarkValue(textBox.value) ? options.watermarkClassName : options.normalClassName; 
 
          ///////this is wher i tried to set it <========== 
            textBox.value = "26/12/2012"; 
        } 
 
        var focusEvent = function () { 
 
            stopWatermark(); 
            if (isWatermarkValue(textBox.value)) { 
                textBox.value = ""; 
 
          ///////this is where  i was First time  trying to set it <========== 
 
                //alert("was focused"); 
            } 
            setClass() 
        } 
 
        var blurEvent = function () { 
 
            if (isWatermarkValue(textBox.value)) { 
                startWatermark(); 
            } 
            setClass(); 
 
        } 
 
        var initWatermark = function () { 
            setClass(); 
            textBox.onfocus = focusEvent; 
            textBox.onblur = blurEvent; 
            startWatermark(); 
        } 
 
 
        initWatermark(); 
    } 
 
 
    function runWatermarkOn(formId, targetid, wm1,wm2,wm3, iterations, delay) { 
 
        var dateOptions = { 
            // These variables alter functionality, the main script will use the defaults of any options not included here  
            watermarkVals: [wm1, wm2], // all watermark values. 
            totalIterations: iterations, 
            changeDelay: delay, // in milliseconds 
            extraValsToCheck: ['', null, masked] 
        } 
        if (wm3!= undefined) 
            dateOptions.watermarkVals[2] = arguments[4]; 
        new MultiWatermark(document.forms[formId].elements[targetid], dateOptions); 
 
    } 
    runWatermarkOn("form1", "TBXinsertDate", "insert Date", "dd/mm/yyyy", undefined, 2, 1500); 

请参阅上面代码块中间的注释。那就是我尝试的地方。 尝试将今天的日期硬编码为它的值(value)。 正如我所指的问题。这个想法是,我尝试使用什么 javascript 或 Jquery 并不重要,因为 MaskEditExtender 超越了我的值(value)。

我真的很感谢这里的一些帮助。

谢谢

请您参考如下方法:

由我解决,像往常一样,当问题的代码太长而无法通读时

虽然代码不是问题,但正如我所说,是 Extender-MaskEdit 压倒了我的值(value)观。

作为解决方法,我所做的是 C# onload 禁用 MaskEdit

    insertDate_MaskedEditExtender.Enabled = false; 

和javascript

var MaskEdit1 = $('#BEHAVIOR-id' (not the standart one of the extender); 
MaskEdit1.disabled = false;