Как превратить это в глобальную функцию JavaScript, влияющую на все значения - PullRequest
0 голосов
/ 07 декабря 2010

Этот код загружает через jQuery страницу, основанную на событиях щелчка по флажкам.

function product_analysis(address, box) {
    if (box.checked) {
        $('#product_' + box.alt).load(address);
    } else {
        $('#product_' + box.alt).load('http://www.divethegap.com/update/blank2.html');
    }
    document.getElementById('product_quantity_PRI_' + box.alt).value = box.value;
};

Событие onclick выглядит следующим образом onclick="product_analysis('http://www.samedomain.blahblahblah', this)

Мне нужно, чтобы для всех флажков, которые уже отмечены при загрузке страницы, эта функция применялась ко всем. Я достаточно уверен в javaScript, но когда дело доходит до объектов и массивов, я теряюсь.

Большое спасибо,

Ответы [ 5 ]

2 голосов
/ 07 декабря 2010

Вы можете использовать этот код, чтобы найти все флажки, которые в настоящее время отмечены:

$(':checkbox:checked')

Если вы хотите что-то сделать для всех из них, вы можете использовать функцию each следующим образом:

$(':checkbox:checked').each(function() {

  // alerts the checkbox for example
  // "this" referes to the checkbox, one after the other
  alert(this); 

})

Или сделать то, что вы просили («для всех флажков, которые уже отмечены при загрузке страницы, чтобы эта функция применялась ко всем»):

$(':checkbox:checked').each(function() {

  product_analysis("someaddress", this);

})

РЕДАКТИРОВАТЬ: Чтобы решить второй вопрос (не часть исходного вопроса, а комментарии ниже):

Я предполагаю, что в вашей разметке есть такие поля.Конечно, используйте несколько значимых идентификаторов, а не мои глупые примеры.

<input type="checkbox" id="foo" />
<input type="checkbox" id="bar" />
<input type="checkbox" id="baz" />

Тогда вы добавите в свой JS следующее:

var addresses = {
   foo: 'some_address',
   bar: 'some_other_address',
   baz: 'yet_another_one'
};

$(':checkbox:checked').each(function() {
  product_analysis(addresses[this.id], this);
})

Это вызовет product_analysis с адресом, который соответствуетк идентификатору флажка.

РЕДАКТИРОВАТЬ (снова):

Есть на самом деле способ добавить метаданные непосредственно в html-теги, которые я не был 'не знаю о.Вы можете добавить атрибуты с префиксом «data-» к вашему тегу, например:

<input type="checkbox" data-address="someaddress" data-foo="something else" data-bar="more data!" />

Подробнее об этом можно прочитать в блоге Джона Резига .

0 голосов
/ 07 декабря 2010

Спасибо, ребята, за всю вашу помощь, вот и я ее получил.Jakob, вероятно, сочтет это хаком, но это сайт, управляемый данными, и, основываясь на моих ограниченных технических знаниях, невозможно изменить файл JS при каждом добавлении нового продукта.

0 голосов
/ 07 декабря 2010

Если у вас есть класс, названный «выбранным», когда флажок установлен, вы можете сделать что-то вроде этого

$('.selected').function(element){product_analysis(address, element)};
0 голосов
/ 07 декабря 2010

Вам нужно проверить количество проверенных номеров, а затем вызвать ваш код.

var checkLength = checkObj.length;

for(var i = 0; i < checkLength ; i++) {
 if(radioObj[i].checked) {
 }
// here your code base on check box status
}
0 голосов
/ 07 декабря 2010

это обязательный скрипт

$().ready(function(){
    var box, address;
    $(":checkbox").each(function(){
           box = this;
           if (box.checked) {
               address = ""; //you can set address either in hidden fields or in metadata
               $('#product_' + box.alt).load(address);
           }
           else {
                $('#product_' + box.alt).load('http://www.divethegap.com/update/blank2.html');
           }           
           document.getElementById('product_quantity_PRI_' + box.alt).value = box.value;
    });
});
...