2011-05-03 86 views
1

我在jQuery中遇到綁定動態事件的問題。我想實現的是有一個事件作用於先前已設置的變量。例如我有事件綁定中的動態變量

someFunc = function (form_id) 
{ 
    $("input").bind("focus", function() 
    { 
     $("#"+form_id).css({"border":"1px solid red"}); 
    }); 
} 

someFunc("edit_form"); 
somefunc("add_form"); 

現在,這是我正在尋找的大型簡化,但綁定時的動態性質是我所需要的。這裏的問題是,基本上我希望jQuery能夠在應用綁定時執行任何「form_id」,但是當它觸發焦點時,它會在「form_id」的任何位置執行。

我明白爲什麼會出現這種情況,我的問題是如何實現我正在尋找的功能。 (這裏再次形成只是一個例子,而不是實際的功能)。

編輯1:

這可能是我想要達到一個更好的例子:

Dog.prototype = { 
    name: "Dog", 

    bind_function : function() 
    { 
     name = this.name; 

     $(name+"_edit_form input[name='something']").bind("focus", function() 
     { 
      console.log(name); 
     }) 
    } 
} 

function Dog() { 
    this.breed = "Chihuaha"; 
} 

Rover = new Dog(); 
Rover.bind_function(); 

Fido = new Dog(); 
Fido.bind_function(); 

現在我要專注於生產特定的狗的名字的控制檯日誌,但目前它只會控制登錄最後一隻狗的名字?

+0

你的第二個例子是更加混亂。爲什麼'this.breed'?另外你總是選擇'$('Dog_edit_form input [....'這似乎是錯誤的。 – 2011-05-03 12:07:29

+0

對不起,這是一個特別困難的事情,無論如何找到答案。現在發佈。 – Dormouse 2011-05-03 12:11:53

回答

1

我正在尋找eventData在綁定而不是執行時傳遞變量。大約一半下來jQuery的文檔頁面進行綁定():

http://api.jquery.com/bind/

+0

在你的第一個例子中它應該正常工作,它確實:http://jsfiddle.net/JRRuZ/(它單獨行爲在兩個元素上,而不是在正如你解釋的那樣,最後一個使用過的元素) - 我很高興你找到了你的答案,儘管我懷疑你的用法並不是真正實現你所做事情的最佳方式。 – 2011-05-03 12:17:13

+0

乾杯,我今天學到的另一件新事物 - 你對這可能有點不對,但由於我不是100%確定我自己,所以我不能指出具體是什麼。 – 2011-05-03 12:20:41

0

我認爲這是你之後?

$("form").each(function() { 
    var id = $(this).attr("id"); 
    $("input", $(this)).bind("focus", function() 
    { 
     var border = ""; 
     switch (id) { 
      case "edit_form": 
       border = "1px solid red"; 
       break; 
      case "add_form": 
       border = "1px solid blue"; 
       break; 
     } 

     $(this).css({ border: border }); 
    }); 
}); 

儘管沒有使用您的功能,它會根據聚焦的元素表單ID分配不同的CSS。

Live test case

+0

謝謝,但我不認爲這就是我尋找,編輯添加一個更好的(希望更清晰)的例子 – Dormouse 2011-05-03 11:56:27