2013-02-28 1 views
0

먼저, 나는 한 번에 답변을 찾을 수 없다는 점에 약간 혼란 스럽습니다. 질문은 codestyle에 관한 것입니다. 우아한 방식으로 jQuery 체인 연결을 중지하십시오.

는 예를 생각해

페이지에 아무런 입력이없는 경우 어떻게됩니까
$('input[type=text]').on('click', doSomething); 

? 이 선택기의 결과는 null이며 오류가 발생합니다.

그래서, 우리는 코드가 더 크고 이보다 확인해야합니다 :

var inputs = $('input[type=text]'); 

if (inputs) { 
    inputs.on('click', doSomething); 
} 

내가 jQuery를 사랑하고이 솔루션의 더 우아하고 간단한 양식을 기대하고있다.


UPDATE

이 문제의 원인은 페이지의 3 자 스크립트가 포함 prototype.js했다. 죄송합니다. 게시하기 전에 샌드 박스에서 문제를 테스트 했어야합니다.

+2

아니, 이것은 바로 이러한 것입니다 * 일 : 당신은 단순히 당신의 예에서 이전을 할 수 있습니다. '$ ("foobarbaz"). ('클릭', 뭐든간에)'라고 쓰면 항상 작동 할 것입니다. – Jon

+4

논리를 따르기 전에 시도하십시오! – Shef

+3

그 이유는 jQuery'$'객체가 owerwritten을 갖기 때문입니다. 사과. 나는이 질문을 삭제해야한다고 생각한다. 모두에게 감사 드려요! – Dan

답변

7

jQuery 선택기는 항상 jQuery 객체를 반환하므로 절대 null이되지 않습니다.

$('#Not exist!').attr('foo', 'foo'); //no error, returns jQuery 

document.getElementById 달리 :

document.getElementById('Not exist!') == null 
+0

jquery 1.7.2는 나를 위해 null을 반환합니다. 바이올린을 기다리십시오 ... – Dan

+1

@ 단, 나는 그것을 기다리지 않을 것입니다. – gdoron

+0

btw 이것이 mootools에 jquery를 선호하는 가장 큰 이유 중 하나입니다. 체인의 중간에 임의의 null 요소 오류가 없습니다. 연쇄 및 null 처리의 매우 우아한 사용. – Kristian

1

오류, 그냥 빈 개체가 없습니다. 선택기 실제로 null을 반환하지 않습니다

$('input[type=text]').on('click', doSomething); 
2

와 일치하는 항목을 찾을 수없는 경우, 당신은 갈 수 있으며, 그 체인이 중단되지 않도록이 의도적이다. 이것은 jQuery의 "less less, do more"라는 모토를 따르고 있습니다.

나는 jsFiddle to illustrate this을 만들었습니다. 브라우저에서 개발자 도구를 열고 콘솔을보십시오.

var doSomething = function(){}; 
$('input[type=text]').on('click', doSomething); //No error 

//...because this: 

var obj = $('input[type=text]'); //is a jQuery object, even 
           //though there are no <input> elements 

console.dir(obj); //Inspect the console. you get: jQuery.fn.jQuery.init[0] 

나는 희망이 있습니다. 하지 *

$('input[type=text]').on('click', doSomething); 
0

나는이 작품 희망 ...

$('input[type="text"]').on('click', doSomething); 
+0

글쎄,'text'와''text "'변종은 CSS2 + 또는 jQuery 1+에서 똑같이 잘 작동합니다. 문제는 어떤 시점에서'$'변수가'prototype.js' : P로 덮어 쓰여졌습니다. P는 jQuery만큼 좋지 않습니다! – Dan