2013-04-17 69 views
0

這是我的問題,我想選擇一個圖像並使用jquery提交,所以我有不同的圖像,我選擇一個並提交。Jquery選擇一個img並提交。 (表單構建)

所以我的想法是,當我在我的LabBox一些圖像上單擊,例如,「圖像/ dontlike_OFF.png」,我創建一個選擇屬性附加傷害($(this).attr('select', 'true');後來,當我在sendLabForm點擊我想的名字我使用選擇器點擊的圖像$(#LabBox img[attribute=Value])

我相信這個創建屬性的想法很奇怪,但我真的可以看到,在螢火蟲上,該屬性是真正創建的,問題只有當我想要以獲得與選定的屬性img的名稱。

所以,我的問題是:爲什麼這是不可能的? 有一些方法獲取我選擇的img名稱,當我單擊提交按鈕而不使用通常的HTML表單時?

<div id='LabBox'> 
    <img alt="dontlike" name="dlike" src="images/dontlike_OFF.png"/> 
    <img alt="check" name="check" src="images/check_OFF.png"/> 
    <img alt="funny" name="funny" src="images/funny_OFF.png"/> 
    <img alt="idea" name="gidea" src="images/idea_OFF.png"/> 
    <img alt="imp" 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> 
+0

select不是有效的屬性,也不是爲img標籤選擇的。您應該在現代瀏覽器上使用數據。 –

+0

喜歡什麼?一個全球變量? – ePascoal

回答

1

你應該做的是創建一個與圖像相關聯的複選框列表(或使用數據的屬性,如下面註釋)。如果您希望用戶單擊圖像,可以隱藏複選框,只需在圖像和複選框之間創建關聯。提交表單時,會提交複選框值中的圖像url字符串。

你應該怎麼做不是做的是發明屬性。

+0

是的,我已經看到隱藏一個複選框的技術,在我的情況是一個單選按鈕窗體,但沒有其他選項,而是隱藏窗體?謝謝你的回答。 – ePascoal

+2

好吧,如果你想避免創建複選框,你可以像@roasted建議的那樣爲每個圖像創建.data('selected')。然後,當您提交時,發送具有.data('selected')的圖像。但是如果你有一個提交按鈕,大概你有一個表單,那麼爲什麼不走這條路? –

+0

起初,我給了一個downvote,因爲data- *屬性或簡單的js數組或散列是優於外部標記的數據存儲......但後來我撤回了,因爲您可以說服我,在上下文中它可能被認爲是合適的表單提交。 –

2

您應該使用數據(),類似的東西:

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(',')); 
}); 
+0

Derek_Henderson解決方案似乎確保了瀏覽器的互操作性。不過,我相信,由於.data()可以「存儲與匹配元素相關聯的任意數據或返回指定數據的值」([API文檔](http://api.jquery.com/data /))除了只能在現代瀏覽器上運行。非常感謝你們。您在本次討論中幫助了我很多 – ePascoal

0

爲什麼不乾脆放棄選擇的圖像類?

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

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

這是我對我的問題的解決方案。實際上你可以創建屬性,你只需要指定.attr()方法來獲取它們。

這確實有效。

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

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


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

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

    }); 

在這一刻我沒有看到這種方法的任何缺點,但如果您發現此方法的任何問題,請讓我知道。

+2

問題是這是使用非標準屬性。您應該使用$ .data()方法,或者至少爲每個規範命名屬性'data-select'。有關更多信息,請參閱此答案:$ .data()更好:http://stackoverflow.com/a/7262427/193494 –

+0

重申一下,如果您不打算採用表單控件的方式,那麼'.data ()'是要走的路。另外,'.prop()'優於'.attr()'。你不應該發明非標準的屬性。 –