Dojo/Dijit - DateTextBox скрывает мое начальное значение

Демонстрация: http://3wcloud-com-provisioning-qa.appspot.com/testDijitDate< /а>

Всплывающее окно календаря работает нормально и позволяет выбрать новую дату. Но когда страница загружается, я вижу, что дата 15.08.2009 мелькает на мгновение, а затем исчезает. Есть ли причина, по которой CSS или JS скрывают это по умолчанию?

dojo.require("dijit.form.DateTextBox");
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/resources/dojo.css" rel="stylesheet" />
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.3/dijit/themes/claro/claro.css" rel="stylesheet" />
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js" djConfig="parseOnLoad:true"></script>

<body class="claro">
  <input id="startDate" name="startDate" dojoType="dijit.form.DateTextBox" required=true value="08/15/2009" />

Я все еще учусь использовать FireBug. Могу ли я узнать значение, просмотрев DOM?

Firebug показывает:

<!-- <input type=text name=startDate size=10 value=""> -->
<div wairole="presentation" dojoattachevent="onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse" id="widget_startDate" class="dijit dijitReset dijitInlineTable dijitLeft dijitTextBox dijitDateTextBox" role="presentation" widgetid="startDate">
  <div style="overflow: hidden;">
    <div class="dijitReset dijitValidationIcon">
      <br/>
    </div>
    <div class="dijitReset dijitValidationIconText">Χ</div>
    <div class="dijitReset dijitInputField">
      <input type="text" autocomplete="off" dojoattachpoint="textbox,focusNode" class="dijitReset" aria-valuenow="" aria-invalid="true" id="startDate" tabindex="0" aria-required="true" value="" />
      <input type="text" style="display: none;" name="startDate" />
    </div>
  </div>
</div>


person NealWalters    schedule 03.09.2009    source источник


Ответы (2)


Dojo использует даты в стиле ISO8601/RFC3339 исключительно в разметке. Каждый раз, когда в разметке требуется значение даты, вы должны указывать его исключительно как гггг-мм-дд. При установке атрибута даты из JavaScript вы должны использовать объект Date:

dojo.require("dijit.form.DateTextBox");
dojo.addOnLoad(function() {
  // make the date text box
  var startDateTextBox = new dijit.form.DateTextBox({
    value: new Date(2009, 7, 15)
  }, "startDate");
});
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/resources/dojo.css" rel="stylesheet" />
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.3/dijit/themes/claro/claro.css" rel="stylesheet" />
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js" djConfig="parseOnLoad:true"></script>

<body class="claro">
  <input id="startDate" name="startDate" dojoType="dijit.form.DateTextBox" required=true value="2009-08-15" />

person Community    schedule 03.09.2009
comment
Право на! Спасибо. Это немного вводит в заблуждение, потому что дата отображается как мм/дд/гггг, но в этом есть смысл. - person NealWalters; 03.09.2009

Похоже, что Dijit очищает значение, когда DateTextBox применяется к полю ввода. Я не уверен, почему атрибут value не будет сохранен, когда элемент управления dijit привязан к вводу. Однако DateTextBox имеет свойство value в API; вы можете попробовать сконструировать его с этим значением в параметрах конструктора программно вместо использования атрибута dojoType. Я думаю, это будет выглядеть примерно так:

dojo.addOnLoad(function(){
    // make the date text box
        var startDateTextBox = new dijit.form.DateTextBox({
             value: "08/15/2009"
        }, "startDate");
});

ХТН

person RMorrisey    schedule 03.09.2009
comment
Вы также можете попробовать установить dijit.byId(startDate).value после создания виджета. - person RMorrisey; 03.09.2009
comment
Сделал бы я это, чтобы разместить его правильно: dojo.byid(plannedCompletionDateWrapper).innerHTML = PlannedCompletionDate У меня есть две даты в моей форме, поэтому я пробую эту технику на второй дате. - person NealWalters; 03.09.2009
comment
Ваш синтаксис приводит к этой ошибке: _8.getMonth не является функцией. Я сделал несколько небольших изменений: var PlanningCompletionDate = new dijit.form.DateTextBox({ value: 02.09.2009}, planCompletionDate); dojo.byid(plannedCompletionDateWrapper).innerHTML = запланированнаяДатаЗавершения; - person NealWalters; 03.09.2009
comment
Я бы попробовал использовать Firebug, чтобы понять, почему возникает эта ошибка getMonth. Извините за ошибку! Код, который я написал выше, не вызывает и не пытается вызвать метод getMonth; но отладка этого, вероятно, даст вам много понимания того, что происходит. Я не уверен, что замена innerHTML - это то, что вы хотите сделать, похоже, это может нарушить функциональность элемента управления dijit. - person RMorrisey; 03.09.2009