2013-07-01 2 views
0

나는이 같은 조금 보이는 방법이 있습니다JQuery와() 대표

function turnBlue() 
{ 
    $(this).css('background-color','blue'); 
} 

function fillWithGoodies(obj) 
{ 
    var goodie_box = $("<div id='goodie_box'>Goodies! Click me and my parent will turn blue.</div>"); 
    $(obj).append(goodie_box); 
    $(goodie_box).on('click', obj, turnBlue); 
} 

문제 turnBlue()가 호출 될 때, "이"는 goodie_box의 사업부는 점이다 obj가 아니라. (객체를 원한다)

JQuery는 .selector() 메소드를 사용했으나 사용하기에 안전하지 않습니다. 이 일 경우 http://api.jquery.com/selector/, 내가했을 것 :

$(goodie_box).on('click', $(obj).selector(), turnBlue); 

구조를 변경하지 않고이 작업을 수행 할 수있는 방법이 있나요?

참고 : 나는 아래에서 대신 할 수 있음을 알고 있지만 여기의 예제는 실제 코드의 일부입니다. 내 질문은 : 당신이 어떻게 든 개체의 선택기를 얻을 수 있습니다.

// Don't want to have to do this: 
    $(obj).on('click', function() { doSomething(obj) }); 

참고 # 2 : 호출 부모()이 하나의 해결책이 아니다 : 진짜 코드는 복잡한 동적 객체를 생성하고 부모는 깊이 될 수 있습니다.

+0

왜'$에 대한 passing data in jQuery.on()를 참조하십시오 (obj) .append ("

Goodies!
") .on ('클릭', doSomething);'작동하지 않습니까? – YD1m

+0

좋은 점. 내 예제가 정확하지 않습니다. Fixing .. – Anthony

+0

YD1m 질문을 수정하면 – manraj82

답변

2

CSS 클래스, 의사 클래스 등을 조합 할 수있는 많은 셀렉터가 있습니다. 나는 그것을 실행하는 것이 현실적이라고 믿지 않는다. 귀하의 링크는 이 ... 속성을 사용할 수있는 선택의 신뢰할 수있는 지표 ...

는 또한, selector 속성을 이해 할 수 있습니다 당신처럼 사용하는 아닙니다 결코 말한다. 문서에 lokk을 가지고 : 이벤트를

을 유발하지만 핸들러에 데이터를 전달 할 수있는 가능성이 선택한 요소의 자손을 필터링 할 셀렉터 문자열. 문서의 샘플 :

function greet(event) { alert("Hello "+event.data.name); } 
$("button").on("click", { name: "Karl" }, greet); 
$("button").on("click", { name: "Addy" }, greet); 

그래서 귀하의 경우는 다음과 같이됩니다 : 당신이

function turnBlue(event) { 
    $(event.data).css('background-color','blue'); 
} 

function fillWithGoodies(obj) { 
    var goodie_box = $("<div id='goodie_box'>Goodies! Click me and my parent will turn blue.</div>"); 
    $(obj).append(goodie_box); 
    $(goodie_box).on('click', obj, turnBlue); 
} 
+0

답을 업데이트했습니다. 그게 내가 찾고있는 것입니다. 나는 event.data 속성에 대해 몰랐다. Marvin에게 감사드립니다! – Anthony

0

할 수 있습니까?

function doSomething(that) 
{ 
    console.log(that); 
} 

function fillWithGoodies(obj) 
{ 
    $(obj).append("<div id='goodie_box'>Goodies!</div>"); 
    $(obj).click(function(){ 
     doSomething(obj); 
    }); 
} 
+0

죄송합니다, 제 예는 정확하지 않았습니다. 지금 업데이트되었습니다. – Anthony

0

당신이 on([selector])에서 PARAM을 넣고 그것이 선택하지 않은 경우, 그것은 [data]로 전환됩니다, 그래서 당신이 시도 할 수 있습니다 :

function turnBlue(e) 
{ 
    $(e.data).css('background-color','blue'); 
} 

function fillWithGoodies(obj) 
{ 
    var goodie_box = $("<div id='goodie_box'>Goodies! Click me and my parent will turn blue.</div>"); 
    $(obj).append(goodie_box); 
    $(goodie_box).on('click', obj, turnBlue); 
} 

+0

Brilliant! 그것은 내가 찾고 있었던 바로 그 것이다. 감사합니다 Jarvan! (마빈이 대답에 당신을 때려 눕힌 것처럼 보입니다) – Anthony