2014-09-10 3 views
1

Я экспериментирую с XForms и пытаюсь динамически загружать javascript, но не могу понять это.Позвонить javascript из действия XForms

Я представляю простой пример - это просто поле и кнопка ввода, которая загружает JavaScript:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" 
    xmlns:ev="http://www.w3.org/2001/xml-events" > 
    <head> 
     <title>Hello World in XForms</title> 
     <xf:model> 
     <xf:instance xmlns=""> 
      <data> 
       <firstName/> 
      </data> 
     </xf:instance> 
     </xf:model> 

     <script type="text/javascript"> 
     var myFunction = function(){ 
      var name = document.getElementById("firstName").value; 
      alert("Hello " + name + "!"); 
     } 
     </script> 
    </head> 
    <body> 
     <xf:label>Please enter your first name: </xf:label> 
     <xf:input ref="firstName" id="firstName">   
     </xf:input> 
     <br /> 
     <xf:trigger> 
     <xf:label>Click me!</xf:label> 
     <xf:action ev:event="DOMActivate"> 
      <xf:load resource="javascript:myFunction()" /> 
     </xf:action> 
     </xf:trigger> 
    </body> 
</html> 

Так что в моем сценарии я пытаюсь получить значение из поля ввода, а затем показать предупреждающий блок с конкатенированной строкой. В настоящее время я получаю «Hello undefined!»

У вас есть идея, как получить значение от firstNamexf:input с помощью Javascript? Я знаю, как это сделать только с XForms, но это своего рода доказательство концепции.

На боковой ноте - я использую XSLTForms, поэтому XForms запускается на клиенте.

Другой намек может быть в том, что XSLTForms трансформирует xf:input в несколько вложенных span элементов с <input type="text"> элементом, но input элемент не имеет имя или идентификатор.

+0

Вы должны установить 'id' на входе, а не только имя, потому что вы используете' getElementById'. В вашем примере: ''. – GuyT

+0

Да, я действительно установил 'id' ввода. Но в моих попытках проб и ошибок я также экспериментировал с 'getElementByName'. Я сделал редактирование. Спасибо за комментарий. – lapadets

+0

Что вы на самом деле хотите, чтобы скрипт выполнял? Ваш текущий пример может быть достигнут с помощью xf: alert. Другие скриптовые функции могут быть достигнуты с помощью xf: bind –

ответ

1

С XSLTForms, существуют различные возможности ...

Если вы хотите получить доступ к значению соответствующего HTML входа, я хотел бы предложить document.getElementById("firstName").xfElement.input.value.

Вы также можете использовать свойство node, чтобы получить значение, хранящееся в связанном узле.

Не стесняйтесь просматривать DOM с помощью отладчика, чтобы узнать, как получить информацию из XSLTForms!

--Alain

+0

Вот и все! Чувствует себя хорошо, когда ответ приходит от людей, стоящих за XSLTForms :) Спасибо! – lapadets

Смежные вопросы