2013-08-12 4 views
0

Я пытаюсь получить проверенные параметры из таблицы, которые установлены inline. Существует функция поиска, которая устанавливает $(element).css('display','none') на объекты, в которых нет совпадения с поиском. В любом случае, эта часть кода вернет только inline, независимо от того, для чего установлены элементы. Даже если я вручную установил все из них в display: none в самой таблице, предупреждение вернет inline для каждого отдельного объекта в таблице. Есть ли какие-либо решения?jQuery.css ('display') только возвращает inline

код JS:

function pass_QR() { 
    var i = 0; 
    var array = []; 
    $("input:checkbox:checked").each(function() { 
     i++; 
     alert($(this).css('display')); 
     if ($(this).val() !== 0 && $(this).css('display') === 'inline') { 
      array.push($(this).val()); 
     } 
    }); 
} 
+0

работает для меня: http://jsbin.com/edomat/1 Мое предположение было бы те, которые вы 've set to 'display: none' также не отмечены. –

+1

Не было бы проще использовать: '$ (" input: checked: visible "). Each'? – kayen

+0

@kayen: Тогда 'i' будет иметь другое значение. Он увеличивается, независимо от того, отображается ли флажок. –

ответ

2

Фундаментально, css("display") делает работу, так что-то еще происходит.

Я подозреваю, что одна из двух вещей:

  1. Флажки, что вы делаете display: none никогда не checked, и поэтому вы не видите их в each цикле.

  2. Вы не делают флажки display: none, но вместо того, чтобы делать что-то предок элемент из них. В этом случае $(this).is(":visible") - это то, что вы ищете.

Приведен пример # 2: Live Copy | Live Source

<div id="ancestor"> 
<input type="checkbox" checked> 
</div> 
<script> 
$("#ancestor").css("display", "none"); 
console.log("display property is now: " + 
    $("input:checkbox:checked").css("display")); 
console.log("visible tells us what's going on: " + 
    $("input:checkbox:checked").is(":visible")); 
</script> 

... который выводит:

display property is now: inline-block 
visible tells us what's going on: false

Применяя, что к коду:

function pass_QR() { 
    var i = 0; 
    var array = []; 
    $("input:checkbox:checked").each(function() { 
     i++; 
     alert($(this).css('display')); 
     if ($(this).val() !== 0 && $(this).is(':visible')) { 
     // Change is here -----------------^^^^^^^^^^^^^^ 
      array.push($(this).val()); 
     } 
    }); 
} 

Side Примечание: Каждый раз, когда вы звоните $(), JQuery должен сделать какую-то работу. Когда вы оказываетесь назвав его повторно в том же объеме, вероятно, лучше, чтобы сделать эту работу раз:

function pass_QR() { 
    var i = 0; 
    var array = []; 
    $("input:checkbox:checked").each(function() { 
     var $this = $(this); // <=== Once 
     i++; 
     alert($this.css('display')); 
     if ($this.val() !== 0 && $this.is(':visible')) { 
     // Other change is here -------^^^^^^^^^^^^^^ 
      array.push($this.val()); 
     } 
    }); 
} 
+0

Отлично! Это работает во мне. Большое спасибо! – Kastenbrot

+0

@ user2674011: Ах, хорошо! Рад, что помогло. –

0

попробовать следующее:

$("input:checkbox:checked").each(function(i,o){  
     console.log($(this).css("display"));  
}); 

работает скрипку здесь: http://jsfiddle.net/BcfvR/2/

+0

еще раз проверьте его. Я думаю, это то, что вы ищете. Я надеюсь, что это помогает. – maverickosama92

+0

И теперь он вернулся к тому, чтобы быть «работает для меня», - не отвечает. Замечательно, что вы пытаетесь помочь, но, откровенно говоря, это не полезно. –