【发布时间】:2015-01-25 19:29:21
【问题描述】:
我正在使用 laravel 和 dojo,所以表单由服务器生成并通过 ajax 请求,这意味着没有加载整个页面,我想在动态添加的内容的提交按钮上分配一个均匀的侦听器,使用 jquery,我可以简单地在 dom 就绪时执行此操作:
$('body').on('click','element',function(){//something});
但我不知道如何在 Dojo 上做同样的事情,我只能将事件侦听器分配给页面上已经加载的节点,对于小部件我使用 registry.byId('element').on('click',function(){//something})
dojo 上的文档根本没有帮助
HTML 由 laravel 生成,然后作为 ajax 响应返回,如下所示:
`{{Form::open(array('class'=>'rm-form','id'=>'rm-form','files'=>true))}}
<h3>Capture Raw Material</h3>
<div class="form-group">
<label for='mpo'>Enter MPO:</label>
<input data-dojo-type="dijit/form/TextBox" data-dojo-props='required:1' value='{{Input::old('mpo')}}' type="text" id='mpo' name='mpo' placeholder='Enter MPO Number' required />
@if($errors->has("mpo"))
<span class="invalid">{{$errors->first('mpo')}}</span>
@endif
</div>
<div class="form-group">
<label for='rm-width'>Enter Width:</label>
<input id="rm-width" type="text" data-dojo-type="dijit/form/NumberTextBox" value='{{Input::old('rm-width')}}' name= "rm-width" placeholder='Enter Width' constraints="{pattern: '0.######'}" required="true" />
@if($errors->has("rm-width"))
<span class="invalid">{{$errors->first('rm-width')}}</span>
@endif
</div>
<div class="form-group">
<label for='rm-weight'>Enter Weight:</label>
<input id="rm-weight" type="text" data-dojo-type="dijit/form/NumberTextBox" name= "rm-weight" value='{{Input::old('rm-weight')}}' placeholder='Enter Width' constraints="{pattern: '0.######'}" required="true" />
@if($errors->has("rm-weight"))
<span class="invalid">{{$errors->first('rm-weight')}}</span>
@endif
</div>
<div class="form-group">
<label for='blanks'>Enter Estimated blanks:</label>
<input id="estimated-blanks" type="text" data-dojo-type="dijit/form/NumberTextBox" name= "estimated-blanks" value='{{Input::old('estimated-blanks')}}' placeholder='Enter Enter Estimated Blank' }"
required="true" />
@if($errors->has("estimated-blanks"))
<span class="invalid">{{$errors->first('estimated-blanks')}}</span>
@endif
</div>
<div class="form-group">
<label for='grade'>Grades</label>
<select name="grade" id='grade' data-dojo-type="dijit/form/Select">
@foreach($grades as $grade)
<option value='{{$grade}}' {{$grade==Input::old('grade')?'checked':''}}>{{$grade}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for='grades'>Date</label>
<input type='date' name="text" id='date' data-dojo-type="dijit/form/DateTextBox" constraints="datePattern: 'dd-MM-yyyy'" value='{{Input::old('date')}}' />
@if($errors->has("date"))
<span class="invalid">{{$errors->first('date')}}</span>
@endif
</div>
<div class="form-group">
<label for='grades'>Notes</label>
<textarea name="notes" id='notes' data-dojo-type="dijit/form/Textarea" >
{{Input::old('notes')}}
</textarea>
@if($errors->has("notes"))
<span class="invalid">{{$errors->first('notes')}}</span>
@endif
</div>
<div class="form-group">
<div class="form-group">
<input type='file' id='file' name='file'/>
</div>
</div>
<div class="form-group">
<button id="save-rm" type='button' data-dojo-type="dijit/form/Button" >
Create
</button>
</div>{{Form::close()}}`
这就是我把它放在 DOM 上的方式
function rmrespnse(data)
{
require(['dijit/registry',"dijit/layout/ContentPane","dojo/domReady!"], function(registry,ContentPane){
var cp = registry.byId('rm-body');
cp.set('content',data);
});}
【问题讨论】:
-
如果您动态添加小部件,您需要有小部件引用以将事件附加到小部件(或小部件 domNode)。如果没有对元素的任何引用,则无法在其中附加事件侦听器jQuery 或 Dojo 或任何框架。你能告诉我们你是如何添加小部件的代码吗?
-
我添加了一些更改,请再看我的帖子
-
@frank 查看我编辑的帖子
-
我已经添加了一个答案。希望对您有所帮助。
标签: dojo dijit.form