2016-05-23 2 views
0

Я пытаюсь создать собственное окно поиска в Sharepoint с помощью HTML и javascript, и я не могу заставить его работать в Chrome. Мой код:JS onclick and onkeydown in chrome

<script type="text/javascript"> 
function GoSearch() 
    { 
     var searchString = document.getElementById('txtSearch').value 
     window.location.href = '/_layouts/15/osssearchresults.aspx?u=<company web>&k=' + searchString; 
    } 

document.addEventListener('DOMContentLoaded', function() { 
    var link = document.getElementById('btnSearch'); 
    link.addEventListener('click', function() { 
     GoSearch(); 
    }); 
}); 

document.addEventListener('DOMContentLoaded', function() { 
    var link = document.getElementById('txtSearch'); 
    link.addEventListener('keydown', function() { 
     if(event.keyCode == 13) document.getElementById('btnSearch').click(); 
    }); 
}); 
</script> 

<table width="100%"> 
    <tr> 
     <td width="100%" align="center"> 
      <input type="text" id="txtSearch" /> 
      <input type="button" id="btnSearch" value="Search" /> 
     </td> 
    </tr> 
</table> 

я первоначально имел onclick и onkeydown непосредственно в коде, как это:

<input type="button" value="hledat" onclick="GoSearch();" id="searchBtn"> 

но не работал, и я нашел, а прибегая к помощи, что хром косяка сделки с встроенными функциями, поэтому я должен добавить слушателей. Поэтому я добавил их, и ничего не изменилось. Он работает в Edge, но в Chrome он иногда обновляет страницу и иногда открывает страницу в режиме редактирования (не знаю, почему), нажимая Enter (кажется, что работает ОК, когда вы нажимаете кнопку вручную, только проблема нажимает enter).

Я что-то не так? Я совершенно не знаком с JS, поэтому я понятия не имею, если есть какая-то глупая ошибка.

Спасибо за любую помощь.

EDIT: после добавления предупреждения в первый прослушиватель, он отлично работает, если я удалю altert, он перестает работать. Код с предупреждением:

document.addEventListener('DOMContentLoaded', function() { 
    var link = document.getElementById('btnSearch'); 
    link.addEventListener('click', function() { 
     window.alert("here i am") 
     GoSearch(); 
    }); 
}); 

Как это возможно?

+0

Вы видите ошибки в консоли (hit f12)? Пробовали ли вы какие-либо шаги отладки, такие как добавление 'window.alert (« here i am »)' к слушателю событий, чтобы узнать, запущен ли он? Добавляли ли какие-либо оповещения или console.log к прослушивателю событий щелчка, чтобы определить 'event' и' event.keyCode'? – scrappedcola

+0

Ваш код хорошо работает с Chrome 48. Встроенный обработчик событий также хорошо поддерживается. –

+0

Попробуйте обернуть событие в window.onload. –

ответ

0

Рад, что вы это поняли. Но здесь гораздо более элегантный способ сделать это. Всегда старайтесь держать свою разметку HTML аккуратной и аккуратной.

<script type="text/javascript"> 
function GoSearch(e){ 
    var query = document.getElementById('txtSearch').value; 
    window.location.href = '/_layouts/15/osssearchresults.aspx?u=https://pentahospitals.sharepoint.com&k=' + query; 
} 

document.addEventListener('DOMContentLoaded', function() { 
     var queryBox = document.getElementById('txtSearch'); 
    queryBox.addEventListener('keyup', function(e){ 
     if(e.which === 13) GoSearch(); 
    }, false); 

     var link = document.getElementById('btnSearch'); 
    link.addEventListener('click',GoSearch, false); 
}); 
</script> 

<table width="100%"> 
    <tr> 
     <td width="100%" align="center"> 
      <input type="text" id="txtSearch"/> 
      <input type="button" id="btnSearch" value="Search"/> 
     </td> 
    </tr> 
</table> 

Работа FIDDLE

Удачи!

0

Я решил. В случае, если кто-нибудь будет искать это в будущем, вот мое решение. Все, что нужно, это добавить return false после функций.

<script type="text/javascript"> 
function GoSearch() 
    { 
     var searchString = document.getElementById('txtSearch').value 
     window.location.href = '/_layouts/15/osssearchresults.aspx?u=https://pentahospitals.sharepoint.com&k=' + searchString; 
    } 
</script> 

<table width="100%"> 
    <tr> 
     <td width="100%" align="center"> 
      <input type="text" id="txtSearch" onkeydown="if(event.keyCode == 13) {document.getElementById('btnSearch').click(); return false;}" /> 
      <input type="button" id="btnSearch" value="Search" onclick="GoSearch(); return false;"/> 
     </td> 
    </tr> 
</table>