使用 ajax 的 .val() 和 .attr("value") 的不同行为在克隆()但未插入的元素上返回数据

发布于 2024-11-28 00:49:43 字数 1667 浏览 0 评论 0 原文

正如标题所示,我试图使用 $.getJSON() 请求的结果设置 .clone() 表单字段的值。所有返回值都与它们所属的表单字段的 name 属性具有相同的键。

当然,我尝试使用 .val("foo") 来处理跨浏览器/字段类型差异,但它不起作用。奇怪的是, .attr("value","foo") 确实如此。

有什么想法吗?这是预期的行为,还是未记录的怪癖?这是相关的代码片段:

function showSites(){
$.getJSON("process.php?action=showSites", function(data) {
    var items = [];
    $.each(data.sites, function(key, val) {  
        var $form = $("#addSiteForm").clone(); 
        var buttons = '<button id="getCert" class="button" href="getCert.php?id=' + val.id + '">Get Cert</button>'
            + '<button id="updateSite" class="button" href="process.php?action=updateSite&id=' + val.id + '">Update Site</button>'                                                                              
            + '<button id="deleteSite" class="button" href="process.php?action=deleteSite&id=' + val.id + '">Delete Site</button>';

        // set siteId
        $form.find("input[name=siteId]").attr("value",val.id);

        // change values
        $.each(val, function(i,v){
            $form.find("[name="+i+"]").val(v);
        });

        items.push('<h3><a href="#">' + val.name + '</a></h3>');
        items.push("<div class='site'>");
        items.push("<form class='siteForm' id='"+val.id+"'>");
        items.push($form.html());
        items.push("</form>");
        items.push(buttons);
        items.push("</div>");   
    });
    var foo = items.join('');
    $("#sites").prepend(foo).accordion("destroy").accordion();                  
});
});

As the title says, I'm trying to set the value of a .clone()'d form field using the results of a $.getJSON() request. All of the return values have the same key as the name attribute of the form field they belong to.

Naturally, I tried to use .val("foo") to deal with cross-browser/field type discrepancies but it wouldn't work. Oddly, .attr("value","foo") does.

Any ideas? Is this expected behavior, or an undocumented quirk? Here is the relevant code snippet:

function showSites(){
$.getJSON("process.php?action=showSites", function(data) {
    var items = [];
    $.each(data.sites, function(key, val) {  
        var $form = $("#addSiteForm").clone(); 
        var buttons = '<button id="getCert" class="button" href="getCert.php?id=' + val.id + '">Get Cert</button>'
            + '<button id="updateSite" class="button" href="process.php?action=updateSite&id=' + val.id + '">Update Site</button>'                                                                              
            + '<button id="deleteSite" class="button" href="process.php?action=deleteSite&id=' + val.id + '">Delete Site</button>';

        // set siteId
        $form.find("input[name=siteId]").attr("value",val.id);

        // change values
        $.each(val, function(i,v){
            $form.find("[name="+i+"]").val(v);
        });

        items.push('<h3><a href="#">' + val.name + '</a></h3>');
        items.push("<div class='site'>");
        items.push("<form class='siteForm' id='"+val.id+"'>");
        items.push($form.html());
        items.push("</form>");
        items.push(buttons);
        items.push("</div>");   
    });
    var foo = items.join('');
    $("#sites").prepend(foo).accordion("destroy").accordion();                  
});
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

秋凉 2024-12-05 00:49:43

您只能在输入标签(文本框、文本区域等)中使用 .val() 属性。

attr("attrname","value") 这用于为任何标签设置值。您可以在 div 标签中设置一些虚拟 attr 并检索值 attr("attrname");

You can use .val() property in input tags( text box, textarea,..) only.

attr("attrname","value") this is used to set value to any tags. You can set some dummy attr in div tag and retrieve value attr("attrname");

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文