0

dartlang を使い始めて、プロジェクトのサンプルを少し拡張しました。クラス Element のフォーカス メソッドが機能しないか、適切に使用していないようです。「エラー」に「フォーカス」して検証動作を取得したいと考えていました。これが私のコードです...

#import('dart:html');

num rotatePos = 0;

var nameField;

const DEFAULT_VALUE = "Click here!";

void main() {

  query("#text").text = DEFAULT_VALUE;

  query("#submit").on.click.add(rotateText);
}

void rotateText(Event event) {
  rotatePos += 360;

  nameField = query("#name");

  var textElement = query("#text");

  String insertedName = nameField.value;

  textElement.style.transition = "1s";
  textElement.style.transform = "rotate(${rotatePos}deg)";

  updateFromElement(textElement, insertedName);
}

void updateFromElement(Element textElement, String value) {

  Element errorField = query("#errorValue");

  if (value == "") {
    errorField.text = "Text Field is empty, please insert a value!";
    errorField.style.color = "red";
    textElement.text = DEFAULT_VALUE;
    textElement.focus();
  } else {
    textElement.text = value;
    errorField.text = "";
  }
}

Element.focus() が機能していないようです。または、ここで何かを誤解している可能性があります。また、理解を深めるために HTML ファイルを追加します。

<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>Sandbox</title>
    <link rel="stylesheet" href="sandbox.css">
  </head>
  <body>
    <h1>Sandbox</h1>

    <p>Dart Sandbox</p>

    Enter any text: <input type="text" id="name"> <input type="button" value="Submit" id="submit"> <div id="error"><p id="errorValue"></div>

    <div id="container">
      <p id="text"></p>
    </div>

    <script type="application/dart" src="web/sandbox.dart"></script>
    <script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
  </body>
</html>
4

2 に答える 2

2

私はあなたが持っていたもののサンプルをモックアップしてみました。HTMLにいくつかのコンポーネントを追加して、ほぼ同じ効果を作成します。私はあなたの問題を見つけました:

var textElement = query("#text");
// ....
updateFromElement(textElement, insertedName);

<P>(段落)要素であるtextElementを渡します。テキストフィールドではありません。したがって、それにfocus()を呼び出すことはできません。これを試して:

updateFromElement(nameField, insertedName);
于 2012-09-25T13:56:27.850 に答える
0

Matt B のおかげで、エラーを確認できました。彼が提案したように、パラメーターは変更しません。どう見てもダサいパターンです。ただし、これを適切に機能させるには、次の行を交換するだけです。

- textElement.focus();
+ nameField.focus();

また、メソッドのより適切な表現は、「updateToElement(Element targetElement, String value)」です。

于 2012-09-25T14:25:36.273 に答える