2013-06-18 3 views
0

Я использую этот script искать в статической страницеКак отправить форму на клавиатуре?

Но я хочу, чтобы это поиск, когда я типа в вводе текста, а не когда я нажимаю кнопку, я Searchd и я обнаружил, что все это будет работать:

onkeypress="this.submit();" 
onkeyup="this.submit();" 
onkeypress="document.forms["f1"].submit();" 
onkeyup="document.forms["f1"].submit();" 

, но ни один из них не работает

я использовал тот же HTML с подлинника

<form id="f1" name="f1" action="javascript:void()" onsubmit="if(this.t1.value!=null &amp;&amp; this.t1.value!='')parent.findString(this.t1.value);return false;"> 
<input type="text" id="t1" name="t1" value="Search" onfocus="if(this.value=='Search')this.value='';" size="20" onkeypress="this.submit();" /> 
<input type="submit" name="b1" value="Find" /> 
</form> 
+0

action = "javascript: void()" ... – teynon

+0

что в этом плохого? – firstroad

+0

chrome дает мне ошибку, когда я использую 'void()', try 'void (0)', добавляя ответ с полным кодом. – teynon

ответ

1

вид.submit() не запускается onsubmit. Вместо этого вы должны реализовать функцию.

Ваш скрипт onkeyup противоречит интуиции, так как для выбора текста onkeyup требуется размытие фокуса текстового поля.

Создан тест, используя свои фрагменты, которые называют findString(this.value); вместо представить:

http://jsfiddle.net/e9Esz/

some sample text 
<form id="f1" name="f1" action="javascript:void(0)" onsubmit="if(this.t1.value!=null &amp;&amp; this.t1.value!='')parent.findString(this.t1.value);return false;"> 
<input type="text" id="t1" name="t1" value="Search" onfocus="if(this.value=='Search')this.value='';" size="20" onkeyup="findString(this.value);" /> 
<input type="submit" id="b1" name="b1" value="Find" /> 
</form> 

Javascript:

var TRange=null; 

function findString (str) { 
if (parseInt(navigator.appVersion)<4) return; 
var strFound; 
if (window.find) { 

    // CODE FOR BROWSERS THAT SUPPORT window.find 

    strFound=self.find(str); 
    if (!strFound) { 
    strFound=self.find(str,0,1); 
    while (self.find(str,0,1)) continue; 
    } 
} 
else if (navigator.appName.indexOf("Microsoft")!=-1) { 

    // EXPLORER-SPECIFIC CODE 

    if (TRange!=null) { 
    TRange.collapse(false); 
    strFound=TRange.findText(str); 
    if (strFound) TRange.select(); 
    } 
    if (TRange==null || strFound==0) { 
    TRange=self.document.body.createTextRange(); 
    strFound=TRange.findText(str); 
    if (strFound) TRange.select(); 
    } 
} 
else if (navigator.appName=="Opera") { 
    alert ("Opera browsers not supported, sorry...") 
    return; 
} 
if (!strFound) alert ("String '"+str+"' not found!") 
return; 
} 
+0

+1 Для «form.submit() не запускает onsubmit». Однако исправление, которое вы предлагаете, не очень понятно. –

+0

Добавлен фрагмент об изменении onsubmit на 'findString (this.value);' Однако логика этого заключается в том, чтобы выбрать текст, как только пользователь наберет. Это означает, что как только пользователь наберет письмо, это текстовое поле потеряет фокус. (Постоянное сражение, чтобы набрать письмо.) Альтернативно, вы можете обернуть текст в промежутке с классом css, имитирующим «выбор», но я не собираюсь заниматься этим без jQuery. – teynon

+0

спасибо за ваш ответ Это единственное, что действительно сработало, теперь мне нужно немного поработать над этой функцией, но спасибо – firstroad

1

У вас проблема с цитатой! Здесь отображается цветовая кодировка!

onkeypress="document.forms["f1"].submit();" 
     ^   ^
     opens   closes 

на заполнив форму, а не элементом, следовательно, почему this.submit терпит неудачу.

Вы должны

this.form.submit() 
+0

спасибо, но он пока не работает – firstroad

+0

Что происходит? Вам нужно добавить детали. – epascarello

+0

Я думаю, что неверный комментарий - это просто ошибка в вопросе, так как ОП сказал, что он отправил –

0

Может быть, вы должны использовать addEventListener() назначать события. Кроме того, у вас есть опечатка. Было бы лучше использовать одинарные кавычки для начала/конца строк, так что встроенные двойные запросы не являются проблемой (наоборот).

onkeypress='document.forms["f1"].submit();' 

и представить форму с помощью Javascript:

document.forms[0].submit() 

представляет первую форму.

+0

спасибо за ответ, но он не сработал – firstroad

0

Как сказал Том, называя form.submit() не запускает onsubmit обработчиков , Обработчики onsubmit вызывается только при отправке формы вручную. Поэтому, если вы пытаетесь отправить свою форму вручную, вы должны сами проверить свои ошибки.

HTML

<form id="f1">...<form/> 

JS

// After the DOM is loaded 
var form = document.getElementById('f1'); 
function canSubmit(form) { 
    if(form.t1.value!=null && form.t1.value!='') { 

    } 
    return false; 
} 

form.onsubmit = function() { 
    return canSubmit(form); 
} 

form.onkeypress = function() { 
    if(canSubmit(form)){ 
     form.submit(); 
    } 
} 

Сказав все это, если вы только что findString, который был немного умнее, то вы бы просто назвать его из обоих мест и игнорировать его при опорожнении

function findString(value) { 
    if (value) { 
     parent.findString(form.t1.value); 
    } 
} 

form.onsubmit = function() { 
    findString(form.t1.value); 
    return false; 
} 

form.onkeypress = function() { 
    findString(form.t1.value); 
} 
+0

Это все еще не касается логической проблемы выбора текста на клавише, который размывает фокус на вход. Это то, о чем я говорил в своем ответе. – teynon

+0

@ Тома - это ОП, спрашивающий об этом? Я не видел упоминания OP ... Вопрос нуждается в улучшении ... –

+0

Я уже ответил на его оригинальный вопрос. Поэтому вы думаете, что нам не следует идентифицировать другие важные проблемы с кодом, если они не спрашивают об этом. – teynon

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