OSS で利用できる機能
エディター - 概要
Ignite UI for jQuery はエディターを提供します:
igTextEditor、
igNumericEditor、
igDateEditor、
igCurrencyEditor、
igPercentEditor、
igMaskEditor、
igDatePicker、および
igCheckboxEditor。
このサンプルは CTP 機能を使用しています。製品版では、API や動作が変更される場合があります。
測定単位
合計:
このサンプルは、より大きい画面サイズのためにデザインされました。
モバイル デバイスで画面を回転、フル サイズ表示、またはその他のデバイスにメールで送信します。
このウィジェットは以下の機能を提供する共有コアがあります:
書式設定、ローカライズ、および検証
コード ビュー
クリップボードへコピー
$('#clientName').igTextEditor({ placeHolder: "会社名" }); $('#clientMail').igTextEditor({ placeHolder: "someone@example.com" }); $('#clientMail').igValidator({ email: true, notificationOptions: { direction: "bottom", mode: "popover" } }); $('#deliveryAddress').igTextEditor({ placeHolder: "住所、私書箱番号" }); $('#deliveryDate').igDateEditor({ placeHolder: "2015/12/30" }); $('#freeDelivery').igCheckboxEditor({ size: "small", valueChanged: function (e, args) { var totalText = $("#total").text().replace("合計: ", ""), total = parseFloat(totalText, 10); if (args.newValue) { total = total - 20; } else { total = total + 20; } $("#total").text("合計: " + total); } }); $('#price').igCurrencyEditor({ value: "79", minValue : 0, currencySymbol: "€" }); $('#amount').igNumericEditor({ dataMode: "int", value: 10, minValue: 1, blur: function (evt) { calculateTotalPrice(); } }); $('#discount').igPercentEditor({ value: 0.08, minValue: 0 }); $(document).delegate("#price", "igcurrencyeditorblur", function (evt) { calculateTotalPrice(); }); $(document).delegate("#discount", "igpercenteditorblur", function (evt) { calculateTotalPrice(); }); calculateTotalPrice(); function radioChange() { var radioMetric = document.getElementById("radioMetric"); if (radioMetric.checked) { var imperialPrice = $('#price').igCurrencyEditor("option", "value"); //Change the currency symbol to Euros $('#price').igCurrencyEditor("option", "currencySymbol", "€"); //Calculate the price in Euros $('#price').igCurrencyEditor("option", "value", calculateNewPrice(imperialPrice)); //Update labels to Metric units $("label[for='pricem3']").text("キュービック メーターの価格"); $("label[for='amountm3']").text("キュービック メーターの量"); //Update igNumericEditor //Update the amount in cubic meter var yardAmount = $('#amount').igNumericEditor("option", "value"); $('#amount').igNumericEditor("option", "value", calculateNewAmount(yardAmount)); //Update Total price calculateTotalPrice(); } else { //Update igCurrencyEditor var metricPrice = $('#price').igCurrencyEditor("option", "value"); //Change the currency symbol to Dollar $('#price').igCurrencyEditor("option", "currencySymbol", "$"); //Calculate the price in Dollars $('#price').igCurrencyEditor("option", "value", calculateNewPrice(metricPrice)); //Update labels to Imperial units $("label[for='pricem3']").text("キュービック ヤードの価格"); $("label[for='amountm3']").text("キュービック ヤードの量"); //Update igNumericEditor //Update the amount in cubic yard var metricAmount = $('#amount').igNumericEditor("option", "value"); $('#amount').igNumericEditor("option", "value", calculateNewAmount(metricAmount)); //Update Total price calculateTotalPrice(); } } function calculateNewPrice(oldPrice) { var radioMetric = document.getElementById("radioMetric"); var newPrice; if (radioMetric.checked) { newPrice = oldPrice * 0.8; return newPrice; } else { newPrice = oldPrice * 1.25; return newPrice; } } function calculateNewAmount(oldAmount) { var radioMetric = document.getElementById("radioMetric"); var newAmount; if (radioMetric.checked) { newAmount = oldAmount * 0.77; return newAmount; } else { newAmount = oldAmount * 1.30; return newAmount; } } function calculateTotalPrice() { var pricePerUnit = $('#price').igCurrencyEditor("option", "value"); var unitsAmount = $('#amount').igNumericEditor("option", "value"); var discount = $('#discount').igPercentEditor("option", "value"); var pricePerUnitWithDiscount = pricePerUnit - (pricePerUnit * discount); var totalPrice = pricePerUnitWithDiscount * unitsAmount; $("#total").text("合計: " + Math.round10(totalPrice, -2)); } function createNewOrder() { $("#successMessage").text("注文書が作成されました。"); $("#successMessage").stop(true, true).fadeIn(200).fadeOut(3000); }
<div id="container"> <div id="formContainer"> <p class="inline">測定単位</p> <input type="radio" name="radioMeasurement" id="radioMetric" value="metric" onchange="radioChange()" checked=""></input> <label for="radioM">メトリック</label> <input type="radio" name="radioMeasurement" id="radioImperial" value="imperial" onchange="radioChange()"></input> <label for="radioI">インペリアル</label> <div id="mainInfo"> <div class="element"> <label for="client">顧客</label> <input id="clientName" type="text" name="client"></input> </div> <div class="element"> <label for="address">配送先住所</label> <input id="deliveryAddress" name="address"></input> </div> <div class="element"> <label for="pricem3">キュービック メーターの価格</label> <input id="price" name="pricem3"></input> </div> </div> <div id="client"> <div class="element"> <label for="mail">連絡先のメール</label> <input id="clientMail" name="mail"></input> </div> <div class="element"> <label for="date">出荷日付</label> <input id="deliveryDate" name="date"></input> </div> <div class="element"> <label for="amountm3">キュービック メーターの量</label> <input id="amount" name="amountm3"></input> </div> </div> <div id="delivery"> <div class="element mid"> <input id="freeDelivery"></input> <label for="freeDelivery">無料の出荷を適用</label> </div> <div class="element"> <label for="applyDiscount">割引を適用</label> <input id="discount" name="applyDiscount"></input> </div> </div> <div id="priceContainer"> <div id="submitPurchase"> <p id="total">合計: </p> <input type="submit" id="createOrder" value="注文書を作成" style="height: 25px; width: 200px;" onclick="createNewOrder()"></input> <div id="successMessageDiv"> <p id="successMessage" class="inline"></p> </div> </div> </div> </div> </div>
#container { width: 100%; min-width: 900px; max-width: 900px; display: inline-block; } #formContainer { top: 0px; left: 0px; height: 500px; width: 750px; padding-top: 15px; float: left; margin-left: 20px; } .element { width: 200px; margin-right: 40px; float: left; height: 3.75em; } .element.mid { margin-left: 240px; margin-top: 20px; } p.inline { display: inline-block; } #total { font-weight: bold; font-size: large; text-align: right; } #successMessageDiv { position: relative; bottom: 0; text-align: center; font-size: larger; color: green; } #client { margin-top: 85px; } #delivery { margin-top: 145px; } #submitPurchase{ float:right; margin-right:75px; margin-top:10px; } #mainInfo { margin-bottom: 80px; margin-top: 25px; } @media only screen and (max-width: 780px) { #container { height: 600px; } .element { float: none; margin: 10px 0 10px 0 !important; } #client { margin-top: 0; } #delivery { margin-top: 0; } #priceContainer { margin-top: 0; margin-left: 0; } #mainInfo { margin-bottom: 0; } #successMessageDiv { text-align: unset; position:absolute; } #submitPurchase{ float:left; } }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <!-- Ignite UI for jQuery Required Combined CSS Files --> <link href="http://cdn-na.infragistics.com/igniteui/2024.1/latest/css/themes/infragistics/infragistics.theme.css" rel="stylesheet" /> <link href="http://cdn-na.infragistics.com/igniteui/2024.1/latest/css/structure/infragistics.css" rel="stylesheet" /> <script src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.8.3.js"></script> <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <script src="http://code.jquery.com/ui/1.11.1/jquery-ui.min.js"></script> <!-- Ignite UI for jQuery Required Combined JavaScript Files --> <script src="http://cdn-na.infragistics.com/igniteui/2024.1/latest/js/infragistics.core.js"></script> <script src="http://cdn-na.infragistics.com/igniteui/2024.1/latest/js/infragistics.lob.js"></script> </head> <body> <style> #container { width: 100%; min-width: 900px; max-width: 900px; display: inline-block; } #formContainer { top: 0px; left: 0px; height: 500px; width: 750px; padding-top: 15px; float: left; margin-left: 20px; } .element { width: 200px; margin-right: 40px; float: left; height: 3.75em; } .element.mid { margin-left: 240px; margin-top: 20px; } p.inline { display: inline-block; } #total { font-weight: bold; font-size: large; text-align: right; } #successMessageDiv { position: relative; bottom: 0; text-align: center; font-size: larger; color: green; } #client { margin-top: 85px; } #delivery { margin-top: 145px; } #submitPurchase{ float:right; margin-right:75px; margin-top:10px; } #mainInfo { margin-bottom: 80px; margin-top: 25px; } @media only screen and (max-width: 780px) { #container { height: 600px; } .element { float: none; margin: 10px 0 10px 0 !important; } #client { margin-top: 0; } #delivery { margin-top: 0; } #priceContainer { margin-top: 0; margin-left: 0; } #mainInfo { margin-bottom: 0; } #successMessageDiv { text-align: unset; position:absolute; } #submitPurchase{ float:left; } } </style> <div id="container"> <div id="formContainer"> <p class="inline">測定単位</p> <input type="radio" name="radioMeasurement" id="radioMetric" value="metric" onchange="radioChange()" checked /> <label for="radioM">メトリック</label> <input type="radio" name="radioMeasurement" id="radioImperial" value="imperial" onchange="radioChange()" /> <label for="radioI">インペリアル</label> <div id="mainInfo"> <div class="element"> <label for="client">顧客</label> <input id="clientName" type="text" name="client" /> </div> <div class="element"> <label for="address">配送先住所</label> <input id="deliveryAddress" name="address" /> </div> <div class="element"> <label for="pricem3">キュービック メーターの価格</label> <input id="price" name="pricem3" /> </div> </div> <div id="client"> <div class="element"> <label for="mail">連絡先のメール</label> <input id="clientMail" name="mail" /> </div> <div class="element"> <label for="date">出荷日付</label> <input id="deliveryDate" name="date" /> </div> <div class="element"> <label for="amountm3">キュービック メーターの量</label> <input id="amount" name="amountm3" /> </div> </div> <div id="delivery"> <div class="element mid"> <input id="freeDelivery" /> <label for="freeDelivery">無料の出荷を適用</label> </div> <div class="element"> <label for="applyDiscount">割引を適用</label> <input id="discount" name="applyDiscount" /> </div> </div> <div id="priceContainer"> <div id="submitPurchase"> <p id="total">合計: </p> <input type="submit" id="createOrder" value="注文書を作成" style="height: 25px; width: 200px;" onclick="createNewOrder()" /> <div id="successMessageDiv"> <p id="successMessage" class="inline"></p> </div> </div> </div> </div> </div> <script type="text/javascript"> $('#clientName').igTextEditor({ placeHolder: "会社名" }); $('#clientMail').igTextEditor({ placeHolder: "someone@example.com" }); $('#clientMail').igValidator({ email: true, notificationOptions: { direction: "bottom", mode: "popover" } }); $('#deliveryAddress').igTextEditor({ placeHolder: "住所、私書箱番号" }); $('#deliveryDate').igDateEditor({ placeHolder: "2015/12/30" }); $('#freeDelivery').igCheckboxEditor({ size: "small", valueChanged: function (e, args) { var totalText = $("#total").text().replace("合計: ", ""), total = parseFloat(totalText, 10); if (args.newValue) { total = total - 20; } else { total = total + 20; } $("#total").text("合計: " + total); } }); $('#price').igCurrencyEditor({ value: "79", minValue : 0, currencySymbol: "€" }); $('#amount').igNumericEditor({ dataMode: "int", value: 10, minValue: 1, blur: function (evt) { calculateTotalPrice(); } }); $('#discount').igPercentEditor({ value: 0.08, minValue: 0 }); $(document).delegate("#price", "igcurrencyeditorblur", function (evt) { calculateTotalPrice(); }); $(document).delegate("#discount", "igpercenteditorblur", function (evt) { calculateTotalPrice(); }); calculateTotalPrice(); function radioChange() { var radioMetric = document.getElementById("radioMetric"); if (radioMetric.checked) { var imperialPrice = $('#price').igCurrencyEditor("option", "value"); //Change the currency symbol to Euros $('#price').igCurrencyEditor("option", "currencySymbol", "€"); //Calculate the price in Euros $('#price').igCurrencyEditor("option", "value", calculateNewPrice(imperialPrice)); //Update labels to Metric units $("label[for='pricem3']").text("キュービック メーターの価格"); $("label[for='amountm3']").text("キュービック メーターの量"); //Update igNumericEditor //Update the amount in cubic meter var yardAmount = $('#amount').igNumericEditor("option", "value"); $('#amount').igNumericEditor("option", "value", calculateNewAmount(yardAmount)); //Update Total price calculateTotalPrice(); } else { //Update igCurrencyEditor var metricPrice = $('#price').igCurrencyEditor("option", "value"); //Change the currency symbol to Dollar $('#price').igCurrencyEditor("option", "currencySymbol", "$"); //Calculate the price in Dollars $('#price').igCurrencyEditor("option", "value", calculateNewPrice(metricPrice)); //Update labels to Imperial units $("label[for='pricem3']").text("キュービック ヤードの価格"); $("label[for='amountm3']").text("キュービック ヤードの量"); //Update igNumericEditor //Update the amount in cubic yard var metricAmount = $('#amount').igNumericEditor("option", "value"); $('#amount').igNumericEditor("option", "value", calculateNewAmount(metricAmount)); //Update Total price calculateTotalPrice(); } } function calculateNewPrice(oldPrice) { var radioMetric = document.getElementById("radioMetric"); var newPrice; if (radioMetric.checked) { newPrice = oldPrice * 0.8; return newPrice; } else { newPrice = oldPrice * 1.25; return newPrice; } } function calculateNewAmount(oldAmount) { var radioMetric = document.getElementById("radioMetric"); var newAmount; if (radioMetric.checked) { newAmount = oldAmount * 0.77; return newAmount; } else { newAmount = oldAmount * 1.30; return newAmount; } } function calculateTotalPrice() { var pricePerUnit = $('#price').igCurrencyEditor("option", "value"); var unitsAmount = $('#amount').igNumericEditor("option", "value"); var discount = $('#discount').igPercentEditor("option", "value"); var pricePerUnitWithDiscount = pricePerUnit - (pricePerUnit * discount); var totalPrice = pricePerUnitWithDiscount * unitsAmount; $("#total").text("合計: " + Math.round10(totalPrice, -2)); } function createNewOrder() { $("#successMessage").text("注文書が作成されました。"); $("#successMessage").stop(true, true).fadeIn(200).fadeOut(3000); } </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Ignite UI for jQuery Required Combined CSS Files --> <link href="/igniteui/css/themes/infragistics/infragistics.theme.css" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css" rel="stylesheet" /> </head> <body> <my-app>Loading...</my-app> <!-- 1. Load libraries --> <script src="/js/modernizr.min.js"></script> <script src="/js/jquery.min.js"></script> <script src="/js/jquery-ui.min.js"></script> <!-- IE required polyfills, in this exact order --> <script src="https://cdnjs.cloudflare.com/ajax/libs/es6-shim/0.35.0/es6-shim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.20/system-polyfills.js"></script> <script src="https://unpkg.com/angular2/es6/dev/src/testing/shims_for_IE.js"></script> <script src="https://unpkg.com/zone.js@0.6.23?main=browser"></script> <script src="https://unpkg.com/typescript@2.0.2/lib/typescript.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3"></script> <script src="https://unpkg.com/systemjs@0.19.27/dist/system.src.js"></script> <!-- Ignite UI for jQuery Required Combined JavaScript Files --> <script src="/igniteui/js/infragistics.core.js"></script> <script src="/igniteui/js/infragistics.lob.js"></script> <script> System.config( { paths: { 'npm:': 'https://unpkg.com/' }, map: { '@angular/core': 'npm:@angular/core/bundles/core.umd.js', '@angular/common': 'npm:@angular/common/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http/bundles/http.umd.js', '@angular/router': 'npm:@angular/router/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', 'igniteui-angular-wrappers': 'npm:igniteui-angular-wrappers', 'rxjs': 'npm:rxjs' }, // packages tells the System loader how to load when no filename and/or no extension packages: { rxjs: { defaultExtension: 'js' }, 'igniteui-angular-wrappers': { main: './index.js', defaultExtension: 'js' } }, transpiler: 'typescript', typescriptOptions: { emitDecoratorMetadata: true } } ); System.import( 'basic-usabe.ts' ).then( null, console.error.bind( console ) ); </script> </body> </html>
import { Component, NgModule, OnChanges } from '@angular/core'; import { IgCurrencyEditorComponent, IgDateEditorComponent, IgMaskEditorComponent, IgNumericEditorComponent, IgPercentEditorComponent, IgTextEditorComponent, IgDatePickerComponent, IgValidatorComponent, IgCheckboxEditorComponent } from "/src/igniteui.angular2"; import { FormsModule } from '@angular/forms'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; declare var jQuery: any; @Component({ selector: 'my-app', template: ` <style> #container { width: 100%; min-width: 900px; max-width: 900px; display: inline-block; } #formContainer { top: 0px; left: 0px; height: 500px; width: 750px; padding-top: 15px; float: left; margin-left: 20px; } .element { width: 200px; margin-right: 40px; float: left; height: 3.75em; } .element.mid { margin-left: 240px; margin-top: 20px; } p.inline { display: inline-block; } #total { font-weight: bold; font-size: large; text-align: right; } #successMessageDiv { position: relative; bottom: 0; text-align: center; font-size: larger; color: green; } #client { margin-top: 85px; } #delivery { margin-top: 145px; } #submitPurchase { float: right; margin-right: 75px; margin-top: 10px; } #mainInfo { margin-bottom: 80px; margin-top: 25px; } </style> <div id="formContainer"> <div id="mainInfo"> <div class="element" style="margin-right: 40px;"> <label for="client">顧客</label> <ig-text-editor [(ngModel)]="clientvalue" [options]="{placeHolder: '会社名'}"></ig-text-editor> </div> <div class="element" style="margin-right: 40px;"> <label for="address">配送先住所</label> <ig-text-editor [(ngModel)]="editors.address" [options]="{placeHolder: '住所、私書箱番号'}"></ig-text-editor> </div> <div class="element"> <label for="pricem3">キュービック メーターの価格</label> <ig-currency-editor [(ngModel)]="editors.price"></ig-currency-editor> </div> </div> <div id="client"> <div class="element" style="margin-right: 40px;"> <label for="mail">連絡先のメール</label> <ig-text-editor widgetId="email" [(ngModel)]="editors.email" [options]="editors.emailEditor"></ig-text-editor> </div> <div class="element" style="margin-right: 40px;"> <label for="date">出荷日付</label> <ig-date-editor [(ngModel)]="editors.date"></ig-date-editor> </div> <div class="element"> <label for="amountm3">キュービック メーターの量</label> <ig-numeric-editor [(ngModel)]="editors.amount" [options]="{buttonType:'clear,spin'}"></ig-numeric-editor> </div> </div> <div id="delivery"> <div class="element mid"> <ig-checkbox-editor [(ngModel)]="editors.freedelivery"></ig-checkbox-editor> <label for="freeDelivery">無料の出荷を適用</label> </div> <div class="element"> <label for="applyDiscount">割引を適用</label> <ig-percent-editor [(ngModel)]="editors.discount"></ig-percent-editor> </div> </div> <div id="priceContainer"> <div id="submitPurchase"> <p id="total">合計: : {{this.total}}</p> <input type="button" id="createOrder" value="注文書を作成" style="height: 25px; width: 200px;" (click)="clickHandler()" /> <div id="successMessageDiv"> <p id="successMessage" style="display: inline-block;">{{this.editors.successMessage}}</p> </div> </div> </div> </div>` }) export class AppComponent { public editors: any; public today: Date; get total() { this.editors.total = this.editors.amount * (this.editors.price - this.editors.discount * this.editors.price); if (!this.editors.freedelivery) { this.editors.total += 20; } return this.editors.total; } clickHandler() { this.editors.successMessage = "注文書が作成されました。"; } constructor() { this.today = new Date(); this.editors = { client: '', email: '', emailEditor: { placeHolder: 'someone@example.com', validatorOptions: { email: true, onblur: true, notificationOptions: { direction: "bottom", mode: "popover" } } }, address: '', freedelivery: false, price: 79, amount: 1, discount: 0.06, date: new Date(this.today.getFullYear(), this.today.getMonth(), this.today.getDate() + 1), total: 0 }; } } @NgModule({ imports: [ BrowserModule, FormsModule ], declarations: [ AppComponent, IgCurrencyEditorComponent, IgDateEditorComponent, IgMaskEditorComponent, IgNumericEditorComponent, IgPercentEditorComponent, IgTextEditorComponent, IgDatePickerComponent, IgCheckboxEditorComponent, IgValidatorComponent ], bootstrap: [ AppComponent ] }) export class AppModule {} platformBrowserDynamic().bootstrapModule(AppModule);
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Ignite UI for jQuery Required Combined CSS Files --> <link href="/igniteui/css/themes/infragistics/infragistics.theme.css" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css" rel="stylesheet" /> <!-- 1. Load libraries --> <script src="/js/modernizr.min.js"></script> <script src="/js/jquery.min.js"></script> <script src="/js/jquery-ui.min.js"></script> <!-- ReactJS library --> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.16/browser.js"></script> <!-- Ignite UI for jQuery Required Combined JavaScript Files --> <script src="/igniteui/js/infragistics.core.js"></script> <script src="/igniteui/js/infragistics.lob.js"></script> <!-- Ignite UI for jQuery ReactJS Files --> <script src="https://unpkg.com/igniteui-react@1.0.1/igniteui-react.js"></script> <style> #app { width: 100%; min-width: 400px; } #app .ui-igedit{ margin: 5px; } p.inline { display: inline-block; } </style> </head> <body> <div id="app"> <script type="text/babel"> var App = React.createClass({ getInitialState: function () { return { total: "", price: { value: "79", minValue: 0, currencySymbol: "€" }, amount: { value: 10, minValue: 1 }, discount: { value: "0.08" } } }, units: "metric", componentDidMount: function() { this.calculateTotalPrice(); }, calculateTotalPrice: function() { var pricePerUnit = this.state.price.value; var unitsAmount = this.state.amount.value; pricePerUnit -= pricePerUnit * this.state.discount.value; var totalPrice = pricePerUnit * unitsAmount; this.setState({ total: Math.round10(totalPrice, -2) }); }, createNewOrder: function() { $("#successMessage").text("注文書が作成されました。"); $("#successMessage").stop(true, true).fadeIn(200).fadeOut(3000); }, calculateNewPrice: function (oldPrice) { var newPrice; if (this.units == "metric") { newPrice = oldPrice * 0.8; return newPrice; } else { newPrice = oldPrice * 1.25; return newPrice; } }, calculateNewAmount: function (oldAmount) { var newAmount; if (this.units == "metric") { newAmount = oldAmount * 0.77; return newAmount; } else { newAmount = oldAmount * 1.30; return newAmount; } }, /* events */ valueChangedHandler: function (ev, ui) { var state = this.state[ui.owner.id]; state.value = ui.newValue; this.setState({ state }); this.calculateTotalPrice(); }, deliveryChanged: function (ev, ui) { var total = this.state.total; if (ui.newValue) { total = total - 20; } else { total = total + 20; } this.setState({ total: total }); }, radioChange: function (e) { var price = this.state.price, amount = this.state.amount; this.units = e.currentTarget.value; if (this.units == "metric") { //Change the currency symbol to Euros price.currencySymbol = "€"; } else { //Change the currency symbol to Dollar price.currencySymbol = "$"; } //Calculate the price in Euros/Dollars price.value = this.calculateNewPrice(price.value).toString(); //Update igNumericEditor //Update the amount in cubic meter/yard amount.value = this.calculateNewAmount(amount.value); //Update Total price this.setState({ price, amount }); this.calculateTotalPrice(); }, render: function () { return (<div> <p className="inline">測定単位</p> <input type="radio" name="radioMeasurement" value="metric" onChange={this.radioChange} defaultChecked={true}/> <label htmlFor="radioM">メトリック</label> <input type="radio" name="radioMeasurement" value="imperial" onChange={this.radioChange} /> <label htmlFor="radioI">インペリアル</label> <div> </div> <IgTextEditor id="clientName" placeHolder="会社名" /> <IgTextEditor id="clientMail" placeHolder="someone@example.com" /> <IgTextEditor id="deliveryAddress" placeHolder="住所、私書箱番号" /> <IgDateEditor id="deliveryDate" placeHolder="2015/12/30" /> <div> <IgCheckboxEditor id="freeDelivery" size="small" valueChanged={this.deliveryChanged}/> <label>無料の出荷を適用</label> </div> <IgCurrencyEditor id="price" value={this.state.price.value} valueChanged={this.valueChangedHandler} minValue={this.state.price.minValue} currencySymbol={this.state.price.currencySymbol} /> <IgNumericEditor id="amount" dataMode="int" value={this.state.amount.value} minValue={this.state.amount.minValue} valueChanged={this.valueChangedHandler} /> <IgPercentEditor id="discount" value={this.state.discount.value} minValue={0} valueChanged={this.valueChangedHandler} /> <div id="priceContainer"> <div id="submitPurchase"> <p id="total">合計: {this.state.total} </p> <input type="submit" id="createOrder" value="注文書を作成"onClick={this.createNewOrder} /> <div id="successMessageDiv"> <p id="successMessage"></p> </div> </div> </div> </div> ) } }); ReactDOM.render( <App />, document.getElementById("app") ); </script> </div> </body> </html>