2010-09-14 175 views
1
function insertParamIntoField(url, param, field) { 
    var anchor = document.createElement('a'), query; 
    anchor.value = url; 
    query = anchor.query.split('&'); 

    for(var i = 0, kv; i < query.length; i++) { 
     kv = query[i].split('=', 2); 
     if (kv[0] == param) { 
     field.value = kv[1]; 
     return; 
     } 
    } 
} 

$("a .reply").click(function() { 
    insertParamIntoField(this.href, "replyto", $("input .inputField")[0]); 
    return false; // prevent default action 
}); 

这是我的HTML代码:这个jQuery有什么问题吗?

<textarea name="inputField" id="inputField" tabindex="1" rows="2" cols="40"></textarea> 
<a class ="reply" href="home.php?replyto=username">reply</a> 

我试图做的是从回复URL值插入使用Ajax的文本框,就像Twitter的。如果你明白我的意思?

+0

您可以指定向我们发生了什么或出现什么错误讯息? – corroded 2010-09-14 02:35:39

+0

真的没有事情发生,或者没有显示错误,它只是没有做它的意思? – getaway 2010-09-14 02:41:53

+0

尝试逐步使用Firebug或Chrome开发人员工具...查看每个参数/变量的设置。 – 2010-09-14 02:46:37

回答

1

我是一种欺骗在这里:)

function insertParamIntoField(url, param, field) { 
    var anchor = document.createElement('a'), query; 
    anchor.href = url; 
    query = anchor.search.substring(1, anchor.search.length).split('&'); 

    for(var i = 0, kv; i < query.length; i++) { 
     kv = query[i].split('=', 2); console.log(kv); 
     if (kv[0] == param) { 
     field.value = kv[1]; 
     return; 
     } 
    } 
} 

$("a.reply").click(function() { 
    insertParamIntoField(this.href, "replyto", $("textarea.inputField")[0]); 
    return false; // prevent default action 
}); 

或者:

function insertParamIntoField(anchor, param, field) { 
    var query = anchor.search.substring(1, anchor.search.length).split('&'); // anchor is a DOMElement 

    for(var i = 0, kv; i < query.length; i++) { 
     kv = query[i].split('=', 2); 
     if (kv[0] == param) { 
     field.value = kv[1]; 
     return; 
     } 
    } 
} 

$("a.reply").click(function() { 
    insertParamIntoField(this, "replyto", $("textarea.inputField")[0]); 
    return false; // prevent default action 
}); 
4

我还没有测试过整个脚本函数,但需要删除标记和类/ ID之间的空格,所以使用“a.reply”和“input#inputField”(或者只是“#inputField” ):

$("a.reply").click(function() { 
    insertParamIntoField(this.href, "replyto", $("#inputField")[0]); 
    return false; // prevent default action 
}); 
+0

谢谢,但它仍然工作 – getaway 2010-09-14 02:41:09

1

除了什么fudgey sugges TS,有关于你的insertParamIntoField功能的几件事情,我注意到:

// url: home.php?replyto=username, param: replyto, field: $("input .inputField")[0] 
function insertParamIntoField(url, param, field) { 
    var anchor = document.createElement('a'), query; 
    // anchor is a link element and doesn't have a 'value' attribute 
    anchor.value = url; 
    // It also won't have a 'query' attribute. This probably causes an error 
    query = anchor.query.split('&'); 

    // As stated above there is no 'query' attribute to split on, but 
    // also there are no &'s to split on in the url you pass in anyway. 
    // At best, query will equal the full url... 
    for(var i = 0, kv; i < query.length; i++) { 
     kv = query[i].split('=', 2); 
     // ...so splitting on = would get you 
     // query[0] = "home.php?replyto", query[1] = "username" 
     // ... and "home.php?replyto" != "replyto", so... 
     if (kv[0] == param) { 
     //... it never gets here. Also 'field' is a textarea, not an input 
     // so it also doesn't have a 'value' attribute. try field.html(kv[1]) istead 
     field.value = kv[1]; 
     return; 
     } 
    } 
} 

试试这个:

function insertParamIntoField(url, param, field) { 
    var qs = url.split("?"); 
    var query = qs[1].split("&"); 

    for(var i = 0, kv; i < query.length; i++) { 
     kv = query[i].split('=', 2); 
     if (kv[0] == param) { 
     field.html(kv[1]); 
     return; 
     } 
    } 
} 

$("a.reply").click(function() { 
    insertParamIntoField(this.href, "replyto", $("textarea#inputField")); 
    return false; // prevent default action 
}); 
+0

谢谢,但它仍然是deosnt工作 – getaway 2010-09-14 03:19:52