2010-07-23 23 views
1

我想將JSON數組值傳入我的JavaScript文件,並使用值作爲選擇器來調用相應的html div上的方法。傳遞JSON數組值作爲jQuery選擇器

例如:

function clickEvents(items) { 
for (var r = 0; r < items.length; r++) {  
    var omega = items[r].id +; 

    $(omega).click(function() { 
     alert('Thanks for adding item number #' + omega ' to your cart!'); 
    }); 
} 

在我的JSON是這樣的:

{ 
"Items" : [{ 
     "header: "apple", 
     "id": 5000 
     }, { 
     "header": "banana", 
     "id":5001 
     }, { 
     "header": "pear", 
     "id": 5002 
     }] 
} 

不幸的是,它不能正常工作。我似乎無法讓選擇器匹配。有沒有人知道這種類型的方法適當的語法,或有其他方法的想法?

當我做到這一點,它的工作原理:

function clickEvents(items) { 
    $('#5001').click(function() { 
     alert('hi'); 
    }); 
} 

回答

2

兩件事。

首先,你不能用一個數字開始一個ID。 http://www.w3.org/TR/html4/types.html#type-id

其次,如果使用ID屬性進行選擇,則需要在選擇器中連接#

下面是一個例子:http://jsfiddle.net/3BBtU/

function clickEvents(items) { 
    for (var r = 0; r < items.length; r++) { 

      // removed the stray "+" at the end 
     var omega = items[r].id; 

      // If you wanted to add an attribute to each element, do it here. 
     $('#' + omega).attr('someAttribute', 'some value'); 

      // Wrap handler assignment in a closure, passing "omega" in so that 
      //  when it fires, it is referencing the correct value of "omega" 
     (function(o) { 
       // concatenate "#" to the ID for a proper ID selector 
      $('#' + o).click(function() { 

        // You were missing the second + operator in this concatenation 
       alert('Thanks for adding item number #' + o + ' to your cart!'); 
      }); 
     })(omega); 
    } 
} 

    // Modify IDs so that they do not start with a number 
var obj = { 
    "Items" : [{ 
      "header": "apple", 
      "id": "d5000" 
      }, { 
      "header": "banana", 
      "id": "d5001" 
      }, { 
      "header": "pear", 
      "id": "d5002" 
      }] 
    }; 

    // call the clickEvents() passing in the Items from the obj variable 
clickEvents(obj.Items);​ 

編輯:

  • 新增修正了一個錯誤,我不得不functions,而不是var一個例子
  • 更正了一個問題。由於在.alert()級聯處理程序中正在使用omega變量,這意味着當點擊發生時,它引用最新值更新omega,因此我將處理程序分配包裝在閉包中。
+0

所以ID需要是字符串類型?現在他們是整數 – Sachin 2010-07-23 22:27:38

+0

關於第一件事的問題:用數字作品開始一個ID;這不是標準嗎? – 2010-07-23 22:27:52

+0

@fordays,@ s.susini - 無論是一個字符串還是一個整數,它都是無效的HTML,用一個數字開始一個ID。他們必須從一封信開始。它可能適用於某些瀏覽器,但可能不適用於其他瀏覽器。 – user113716 2010-07-23 22:29:30

0

到底是什麼回事?您在示例中最後一個「id」後面缺少一個引號,但這可能只是一個錯字...(?)

+0

我固定的錯字,但是,我需要幫忙選擇語法正確的,當我調用$(歐米茄)。單擊 我需要做的omega的或選擇語法分配的變化? – Sachin 2010-07-23 22:22:05

0

您必須使用類似於:$("#"+omega)。 你在問一個身份證,不是嗎??

function clickEvents(items) { 
for (var r = 0; r < items.length; r++) {  
    var omega = items[r].id; 

    $("#"+omega).click(function() { 
     alert('Thanks for adding item number #' + omega ' to your cart!'); 
    }); 
} 

事實上,在這種情況下th $()函數使字符串成爲validCSS選擇器。