2012-12-13 3 views
2

У меня есть jQuery on(), применяемый к каждой строке таблицы. После того, как пользователь нажимает на любую строку, начинает загружаться другая страница:Применить jQuery off() к одному столбцу таблицы

table_tag.on("click", "tbody tr", function(event) {     
    var search_id = datatable.fnGetData(this)[0];         
    if(event.ctrlKey) {                       
     window.open("/search/"+search_id+"/"); 
    } else { 
     window.location.assign("/search/"+search_id+"/"); 
    } 
}); 

Я добавил к таблице новую колонку. В каждой ячейке есть только один флажок:

<td><input type="checkbox" /></td> 

Мне нужно предотвратить загрузку другой страницы после нажатия на этот флажок. Я попытался это:

table_tag.off("click", "tbody tr td input:parent") 

Но это не работает. Как я могу это сделать?

+0

вы связываете на в, но отключив щелчок, связанный с т.дом – Popnoodles

ответ

2

У вас нет обработчика на "tbody tr td input:parent". У вас только один обработчик, на "tbody tr".

Вместо этого будьте осторожны, что вы связываете с: "tbody tr :not(input:checkbox)" должно быть лучше.

EDIT: По мере того, как попноподы говорят, вопрос не ясен. Вышесказанное состоит в том, чтобы предотвратить загрузку новой страницы, когда пользователь нажимает этот флажок (в противном случае я полагаю, что флажок будет несколько бесполезным). Если ваша цель состоит в том, чтобы запретить открытие новой страницы, если вы нажмете на строки с установленным флажком, что является другой интерпретацией вопроса, который я вижу, затем примените вышеуказанный патч к вашему селектору и дополнительно проверьте состояние флажка изнутри обработчик.

EDIT2: Произошла ошибка при отсутствии двоеточия; not(...) является неправильным, должно быть :not(...).

EDIT-too-much: Fiddle, с tbody tr td:not(:has(input:checkbox)).

+0

он сказал, что он пытался: 'table_tag.off («щелчок»,«TBODY ввод тр Td: родительская»)'. – JSuar

+0

@JSuar: Точно. И у него не было 'table_tag.on (" click "," tbody tr td input: parent ")'. Вы не можете удалить обработчик, которого у вас нет. – Amadan

+0

Каждая строка в таблице имеет элемент флажка ввода как первую ячейку. Мне нужно предотвратить загрузку новой страницы, когда пользователь нажимает только на этот флажок. Когда он нажимает на другие элементы строки, страница должна быть изменена. Это я имею в виду. – bo858585

0

В настоящее время вы пытаетесь удалить событие click из td, но вы применили его к tr.

Это неоднозначно относительно того, чего вы пытаетесь достичь. Вы либо пытаетесь сделать что-то только один раз, в этом случае используется один()

table_tag.one("click", "tbody tr", function(event) { ... 

или вы не хотите щелкать флажок пузырь и вызвать щелчок на тре

table_tag.on("click", "tbody tr", function(event) { 
    if (this.target!=event) return; // will ONLY catch the tr being clicked 
    ... 

или что-то еще

Смежные вопросы