Jquery现场回复不工作

时间:2013-11-21 10:14:18

标签: javascript jquery jquery-mobile jquery-plugins cordova

在我的phonegap应用程序中,我知道不推荐使用.live后我使用.live,所以我切换到.on函数。

使用Live:

$("#addEditForm").live("submit", function(e) {
    var data = {
        firstname: $("#mFirstname").val(),
        lastname: $("#mLastname").val(),
        gender: $("#mGender").val(),
        dob: $("#dob").val(),
        email: $("#mEmail").val(),
        password: $("#mPassword").val(),
        conformPassword: $("#mConformPassword").val(),
        id:$("#mId").val()
    };
    alert(data.firstname);
    e.preventDefault();

使用ON时:

$("#addEditForm").on("submit",function(e) {
alert("hi");
    var data = {
        firstname: $("#mFirstname").val(),
        lastname: $("#mLastname").val(),
        gender: $("#mGender").val(),
        dob: $("#dob").val(),
        email: $("#mEmail").val(),
        password: $("#mPassword").val(),
        conformPassword: $("#mConformPassword").val(),
        id: $("#mId").val()
    };
    alert(data.firstname);
    saveDatas(data, "#editPage", function() {
        $.mobile.changePage("index.html", {
            reverse: true
        });
    });
    e.preventDefault();

function saveDatas(details, cb) {
alert(details.firstname);
alert(details.firstname);
if (details.firstname == "") details.firstname = "[No Title]";
**dbShell.transaction(function(tx) {**
    if (details.id == "") {
        tx.executeSql("insert into nameDetail(firstname,lastname,gender,dob,email,password,conformPassword,date) values(?,?,?,?,?,?,?,?)", [details.firstname, details.lastname, details.gender, details.dob, details.email, details.password, details.conformPassword, new Date()]);
    } else {
        tx.executeSql("update nameDetail set firstname=?, lastname=?,gender=?,dob=?,email=?,password=?,conformPassword=?,date=? where id=?", [details.firstname, details.lastname, details.gender, details.dob, details.email, details.password, details.conformPassword, new Date(), details.id]);
    }
}, dbErrHandler, cb);

}

它显示E/Web Console(23700): Uncaught Error: TYPE_MISMATCH_ERR: DOM Exception 17 at file:///android_asset/www/js/index.js:51之类的异常**行..

这里

addEditForm is my form id

我的问题是when using the live警报会起作用并提供我的名字,when using on警报不显示也尝试页面显示,页面加载没有成功。

For on function i refer this doc

需要一些帮助...

5 个答案:

答案 0 :(得分:2)

试试这个

$(document).on("submit", "#editFormSubmitButton", function(e) {
    alert('Val');
});

答案 1 :(得分:1)

使用.on()

由于元素是动态添加的,因此无法将事件直接绑定到它们。因此,您必须使用Event Delegation

$(document).on("submit","#addEditForm",function(e) { ..code here.. })

$(document).on("click","#editFormSubmitButton",function(e) { ..code here.. })

语法

$( elements ).on( events, selector, data, handler );

答案 2 :(得分:1)

当您使用.live()时,事件被绑定到文档对象。

$(document).on("submit",'#addEditForm', function(e) {
})

答案 3 :(得分:1)

在“提交时”功能中,表单ID发生了变化,是问题的原因

答案 4 :(得分:0)

.live()

有什么问题

不再推荐使用.live()方法,因为更高版本的jQuery提供了更好的方法,没有它的缺点。特别是,使用.live():

会出现以下问题

jQuery尝试在调用.live()方法之前检索选择器指定的元素,这在大型文档上可能很耗时。 不支持链接方法。例如,$(“a”)。find(“。offsite,.external”)。live(...);无效,无法按预期工作。 由于所有.live()事件都附加在文档元素上,因此事件在处理之前会采用最长和最慢的路径。 在事件处理程序中调用event.stopPropagation()对于停止附加在文档中较低位置的事件处理程序是无效的;该事件已经传播到文档。 .live()方法以令人惊讶的方式与其他事件方法交互,例如,$(document).unbind(“click”)删除通过对.live()的任何调用附加的所有点击处理程序! 什么是.live()和.on()函数之间的主要区别?

功能:不是冒泡身体和文档级别,而是直接在文档中注册。

使用方法: 如果我们看看3个主要事件附件方法,我们可以看到它们非常相似。值得注意的是.live()没有选择器参数。

$(selector).live(events,data,handler); // jQuery 1.3+ $(document).delegate(selector,events,data,handler); // jQuery 1.4.3+ $(document).on(事件,选择器,数据,处理程序); // jQuery 1.7+ 表现:我打算创建一个jsPerf测试,但发现有人已经做了很多努力!以下是.live()和.on()的性能结果。正如你所看到的,.on()优于它的前身.live(),它几乎快3到4倍!