Jquery函数未启动(在第二刻注入html)
Jquery function not fired (html injected in second moment)
很抱歉没有太多清晰的标题。
我正在使用Twitter Bootstrap Modal来编辑一些记录。
<a class="contact" href="#" data-form="/edit/models/sms/{{ @value['fields']['id'] }}" title="Edit">
<span class="fa-stack fa-lg">
<i class="fa fa-square-o fa-stack-2x"></i>
<i class="fa fa-pencil fa-stack-1x"></i>
</span>
</a>
这是打开Modal:的javascript代码
$(".sms-model").click(function(ev) { // for each edit contact url
ev.preventDefault(); // prevent navigation
var url = $(this).data("form"); // get the contact form url
$("#smsModelModal").load(url, function() { // load the url into the modal
$(this).modal('show'); // display the modal on url load
});
$("#smsModelModal").modal('show'); // display the modal on url load
return false; // prevent the click propagation
});
最后,这是注入模态内部的形式:
<div class="modal-body">
<form role="form" method="post" class="sms-model-form" action="{{ @SERVER.REQUEST_URI }}">
<fieldset>
<legend class="sr-only">Edit</legend>
<input type="hidden" name="edit_id_model" value="{{ isset(@sms_model) ? @sms_model[0]['fields']['id']['value'] : '' }}" />
<div class="form-group">
<label for="title">{{ @lng_label_sms_title }}</label>
<input type="text" class="form-control required-field" name="title" value="{{ isset(@sms_model) ? @sms_model[0]['fields']['title']['value'] : '' }}"/>
</div>
<div class="form-group">
<label for="text">{{ @lng_label_sms_text }}</label>
<textarea class="form-control" name="text" class="required-field">{{ isset(@sms_model) ? @sms_model[0]['fields']['text']['value'] : '' }}</textarea>
</div>
<button type="submit" class="btn btn-white pull-right">
<i class="fa fa-plus-circle"></i> {{ isset(@sms_model) ? @lng_btn_edit : @lng_btn_add }}
</button>
<input type="submit" class="btn btn-primary" value="Test" />
</fieldset>
</form>
</div>
每件事都有魅力。现在我将通过AJAX提交表单。
所以我添加了这个:
$('.sms-model-form').on('submit', function(e) {
console.log('test on submit....');
e.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: this.action,
data: $(this).serialize()+'&ajax=TRUE',
context: this,
success: function(data, status) {
$('#smsModelModal').html(data);
}
});
return false;
});
但表单是通过常规模式提交的,而不是通过AJAX提交的。也就是说,我没有在控制台中记录这两个事件。
我想这是因为表单是在页面的第二个瞬间注入的,而不是在
$(document).ready(function() {
我说得对吗?我该如何解决我的问题?
您几乎肯定需要通过委派设置事件处理程序:
$(document).on('submit', '.sms-model-form', function(e) {
它在DOM的根处附加一个处理程序,以捕获冒泡的"提交"事件。因为您在代码运行之后添加模态对话框内容,所以如果按照您的方式添加,代码将不会产生任何效果;".sms-model-form"
选择器将不匹配任何内容,因此不会在任何位置附加任何事件处理程序。
使用上述形式的.on()
,您可以确保涉及动态添加的DOM子结构的事件仍将按照您的意愿进行处理。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何设置html元素填充的动画
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何编写HTML输入的JS内联
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量
- 如何使Javascript动态html表及其上的事件
- 在chrome.tabs.onCreated之后加载HTML页面
- 如何在vs2002中调试html页面
- 如何使用javascript或html下载PDF格式的填写表单
- 如何将二维javaScript数组的内容显示到HTML表中
- 如何从二维数组创建 html
- jquery在$中有两个内容.(一,二).html();.
- JavaScript:将三维数组连接到二维数组中,将值包装在html标记中
- Jquery函数未启动(在第二刻注入html)
- 使用JavaScript在HTML表单字段中传递二维数组
- 如何在Java脚本中使用html页面中的文本来声明、初始化和使用二维数组
- 使用Javascript基于二维属性数组自动生成多个相同类型的html元素会导致浏览器挂起