2013-10-06 1 views
0

Я строю таблицу, используя CSS и сочетание <a> тегов с <span> сек что-то вроде:Таблица с помощью тега и охватывает

<a class='header'> 
    <span>User ID</span> 
    <span>Name</span> 
    <span></span> 
</a> 
<a href='somesite.php'> 
    <span>7</span> 
    <span>Ofek</span> 
    <span><button type="button" onclick="somefunc()">Add to Favourites</button></span> 
</a> 

результатов выглядит примерно так:

enter image description here

Теперь моя проблема в том, что когда я нажимаю кнопку, я все равно перенаправляюсь на somesite.php, а функция somefunc() никогда не вызывается, я вижу где-то, что кнопка не может быть вложена внутри пролета, так что альтернатива чтобы сделать эту работу? Я хочу, чтобы всякий раз, когда пользователь нажимал на строку, он перенаправлял его на somesite.php, но не тогда, когда он нажимает кнопку, тогда мне нужно только вызвать func somefunc().

+1

вы можете написать рабочий скрипт? – BeNdErR

+7

Допустимо использовать таблицы для таблиц - есть 0 причин заменить таблицу на взломанную вместе версию. Мантра «не использовать таблицы» предназначена только для макета, а не для табличных данных. –

+2

Кроме того, вы отметили это с помощью jQuery, но на самом деле не использовали его. Вместо onclick используйте '$ ('button'). On ('click', function (e) {e.preventDefault; somefunc();});' –

ответ

3

Вложение в button элемент в a элемент создает проблемы при обработке событий, и это forbidden в HTML5 CR.

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

<a href='somesite.php'> 
    <span>7</span> 
    <span>Ofek</span> 
</a> 
    <span><button type="button" onclick="somefunc()">Add to Favourites</button></span> 

Это не было бы возможно (как таковых) в логическом подходе, где вы используете table разметку, но это просто, если вы имитируют таблицу с CSS, так что ячейки представляют собой элементы span (или, как правило, элементы фразы/встроенного/текстового уровня).

1

Просто добавьте return false в свой somefunc() код:

function someFunc() { 
    // your existent code 
    return false; 
} 

и в HTML onclick="return somefunc()". Но я также рекомендую не использования onclick HTML атрибуты, но использовать:

$("button").on("click", function (e) { 
    e.preventDefault; 
    somefunc(); 
    return false; 
}); 

Читать о this topic here.

+0

Я уже пробовал, что он не работает ... –

+1

@OfekRon: вам также нужно добавить 'return' в свой' onclick'. 'onclick =" return somefunc() "' – user2736012

+0

@ user2736012 не работает, функция никогда не набирается –

0

Вы можете связать события нажатия на кнопку затем используйте preventDefault():

JS

function somefunc(e){ 
    e.preventDefault(); 
    alert("hey"); 
} 
document.getElementById('abc').addEventListener(
    'click', somefunc, false 
); 

работает скрипку

http://jsfiddle.net/KRVUv/1/

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