Jquery 选择一个 img 并提交它。 (形式构造)

Posted

技术标签:

【中文标题】Jquery 选择一个 img 并提交它。 (形式构造)【英文标题】:Jquery Select an img and submit it. (form construction) 【发布时间】:2013-04-10 11:38:24 【问题描述】:

这是我的问题,我想选择一张图片并使用 jquery 提交,所以我有不同的图片,我选择一个并提交。

所以我的想法是,当我单击 LabBox 中的某些图像时,例如,“images/dontlike_OFF.png”,我创建一个选择属性($(this).attr('select', 'true');,稍后,当我单击 sendLabForm 我想使用选择器$(#LabBox img[attribute=Value]) 获取我单击的图像的名称。

我认为创建属性的想法很奇怪,但我确实可以看到,在 firebug 上,确实创建了该属性,问题只是当我想使用所选属性获取该 img 的名称时。

所以,我的问题是:为什么这是不可能的? 当我点击提交按钮而不使用通常的 html 表单时,有什么方法可以获取我选择的 img 的名称?

<div id='LabBox'>
    <img  name="dlike" src="images/dontlike_OFF.png"/>
    <img  name="check" src="images/check_OFF.png"/>
    <img  name="funny" src="images/funny_OFF.png"/>
    <img  name="gidea" src="images/idea_OFF.png"/>
    <img  name="imptt" src="images/imp_OFF.png"/>
 </div>   
    <script type="text/javascript">

        $("#LabBox img").click(function () 
                $(this).attr('select', 'true');     
            );

        $("#sendLabForm").click(function()
            console.log($("#LabBox img[select='true']").name);     
        );


    </script>

【问题讨论】:

select 不是有效属性,也不是为 img 标签选择的。您应该在现代浏览器上使用数据。 像什么?全局变量? 【参考方案1】:

你应该使用 data(),类似这样的:

DEMO

$("#LabBox img").click(function () 
     $(this).data('select', true);
 );

 $("#sendLabForm").click(function () 
     var selectedImgs = [];
     $("#LabBox img").each(function () 
         $(this).data('select') ? selectedImgs.push(this.name) : false;
     );
     alert(selectedImgs.join(','));
 );

【讨论】:

Derek_Henderson 解决方案似乎确保了浏览器的互操作性。但是我相信 roadted 解决方案更有效,因为 .data() 可以“存储与匹配元素关联的任意数据或返回命名数据中的值”(API Documentation)除了只能在现代浏览器上运行。非常感谢你们。你在这次讨论中帮了我很多忙【参考方案2】:

您应该做的是创建与图像关联的复选框列表(或使用 data 属性,如下所述)。如果您希望用户单击图像,您可以隐藏复选框,只需在图像和复选框之间创建关联。提交表单时,复选框值中的图片url字符串被提交。

你应该做的是发明属性。

【讨论】:

是的,我已经看到隐藏复选框的技术,在我的情况下是单选按钮表单,但是没有其他选项可以隐藏表单?顺便谢谢你的回答。 好吧,如果你想避免创建复选框,你可以像@roasted 建议的那样,为每个图像创建 .data('selected') 。然后,当您提交时,发送那些具有 .data('selected') 的图像。但是如果你有一个提交按钮,想必你有一个表单,那为什么不走那条路呢? 起初我投了反对票,因为与无关标记相比,data-* 属性或简单的 js 数组或哈希是更好的数据存储......但后来我撤回了,因为你可以说服我它在表单提交的上下文中可能被认为是合适的。 嗯,为什么要投反对票?它可能不是首选答案,但它肯定是一个有效的答案,尤其是在表单提交的上下文中(这是问题所在的上下文)? (@KevinC.,这不是针对你,因为你说你撤回了你的反对票。) @DerekHenderson ,我已经向你投了赞成票!肯定不是我。就像我之前说的,我非常感谢您的参与。【参考方案3】:

为什么不简单地给选定的图像一个类别?

$('#LabBox img').click(function(e)
    $(this).toggleClass('active');
);

$('form').submit(function()
    console.log( $('#LabBox img.active') );
);

【讨论】:

【参考方案4】:

这是我的问题的解决方案。实际上你可以创建属性,你只需要指定.attr() 方法来获取它们。

这确实有效。

$("#LabBox img").click(function () 

        $(this).attr('select', true);
);


$("#sendLabForm").click(function()

    console.log( $('#LabBox img[select="true"]').attr('name'));

    );

目前我认为这种方法没有任何缺点,但如果您发现这种方法有任何问题,请告诉我。

【讨论】:

问题在于这是使用非标准属性。您应该使用 $.data() 方法,或者至少根据规范将属性命名为“data-select”。有关为什么 $.data() 更可取的更多信息,请参阅此答案:***.com/a/7262427/193494 重申一下,如果您不打算采用表单控件,.data() 是您的最佳选择。此外,.prop() 优于 .attr()。你不应该发明非标准属性。

以上是关于Jquery 选择一个 img 并提交它。 (形式构造)的主要内容,如果未能解决你的问题,请参考以下文章

我如何以邮件形式发送表单数据并仍然提交

使用带有添加和删除元素条件的 jQuery 克隆表单

多个表单生成的jquery不提交

如何在jquery中找到一个div中的img属性

使用 jQuery 创建帖子表单并提交它的最短方法是啥? [复制]

如何使用 jquery 启用表单的提交按钮?