2014-09-24 3 views
1

Как я могу получить preventDefault для правильной работы в этом контексте? Если пользователь нажимает на гиперссылку, страница перезагружается, я стараюсь предотвратить это действие по умолчанию. Как правило, я бы поймал событие щелчка или что-то в этом роде, но я вызываю функцию непосредственно из гиперссылки. Я не знаю, как это сделать. Любая помощь приветствуется.jquery предотвратить вопросы по умолчанию

<a href='' onclick="javascript:OpenModal(<?=$val->Prodid;?>);"><?=$val->ProdDesc;?> 

<script> 
function OpenModal(id) { 
    OpenModal.preventDefault(); //this does not work, but is here to show what I'm trying to do. 
    $.ajax({ 
     url: "?url=Inventory/detail/"+id, 
     type: "POST", 
     success: function (data) { 
      $('#divDetail').html(data); 
      $('#divDetail').dialog({ 
       modal: true, 
       width: 'auto' 
      }); 

     }, error: function(jqXHR, textStatus, errorThrown){ 
      alert('error'.textStatus.errorThrown); 
     } 
    }); 
} 
</script> 

, если я добавлю:

<a href='' onclick="javascript:OpenModal(<?=$val->Prodid;?>); return false;"><?=$val->ProdDesc;?> 

он работает правильно, но я бы себе представить, что это своего рода хак, а не надлежащим образом делать вещи. Мысли?

+0

надлежащим образом в настоящее время не использовать встроенные события. Почему бы просто не дать ему идентификатор и добавить прослушиватель событий и использовать preventDefault()? –

+0

Не рекомендуется использовать короткий и закрытый тег php, о нет. – Edward

+1

@edward - на самом деле, этот анти короткий тренд тега прошел. Теперь принято, как будто эта атака так и не произошла. –

ответ

3

Pass в event объекта и вызвать preventDefault() на том, что:

<a href='' onclick="javascript:OpenModal(<?=$val->Prodid;?>, event);"><?=$val->ProdDesc;?> 


function OpenModal(id, event) { 
    event.preventDefault(); 
+1

напоминание OP - 'javascript:' избыточно в свойствах onclick. 'onclick =" OpenModal() "' тоже будет работать. –

0

Если вы хотите, чтобы предотвратить это событие, вы можете сделать это в самом случае, если вы объявите его слишком

<script> 
$("a").click(function(event) { 
    event.preventDefault(); 
}); 
</script> 
+0

Не повлияет ли это на то, как работают мои другие гиперссылки? – Waragi

+0

Вы можете указать идентификатор или имя и установить для него событие (например, имя noDefaultAction) – Xavjer

1

Вы можете использовать data attr для анализа вашего идентификатора в JQuery и привязать событие к функции щелчка, а затем предотвратить это.

HTML

<a href='#' id='myLink' data-value='<?php echo $myVal; ?>'>Click Me!</a> 

JQuery

$('#myLink').click(function(e) { 

    e.preventDefault(); 
    OpenModal($(this).attr('data-value')); 

}); 

function OpenModal(id) { 
    $.ajax({ 
     url: "?url=Inventory/detail/"+id, 
     type: "POST", 
     success: function (data) { 
      $('#divDetail').html(data); 
      $('#divDetail').dialog({ 
       modal: true, 
       width: 'auto' 
      }); 

     }, error: function(jqXHR, textStatus, errorThrown){ 
      alert('error'.textStatus.errorThrown); 
     } 
    }); 
}