2013-04-08 1 views
0

У меня есть следующее поле ввода с встроенным обработчиком событий, содержащим несколько функций. Я надеялся, что если reqField() вернется false, остальные функции будут отменены, но этого не произойдет.Как сделать 'return false' предотвращать выполнение последовательных функций в встроенном обработчике событий onclick?

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

Кстати, я не могу просто удалить их из onclick до returning false, потому что они должны оставаться на месте для следующего события onblur.

function getnDisplayTextInputBox(id) { 

var s = document.getElementById(id); 

s.setAttribute('onclick', ''); 

    var obj = getDataAttribs2Obj(id); 
    var str = getParamStrFromDataObj(obj); 

    s.innerHTML = "<input type=\"text\" data-param=\""+obj['param']+"\" id=\"edit\" value=\""+htmlentities(s.innerHTML)+"\" onblur=\"return reqField(this); postData('"+obj['sendtourl']+"', '"+str+"&spanid="+id+"&newVal='+this.value, 'replaceTextTextInputFieldWithValue(resp);', '','');\">"; 

    document.getElementById('edit').focus(); 

} 

выше функция заменяет текст в span с полем ввода, заполненное тем же текстом, когда пользователь нажимает на оригинальном тексте. Затем они могут редактировать текст, который отправляется на сервер и сохраняется onbur.

Некоторые из пролетов имеет атрибут data-param='required' и если да, то reqField() будет требовать, чтобы поле не пусто и будет return false, если она (после оповещения пользователя о проблеме с встревоженным полем). Очевидно, что я не хочу, чтобы следующая функция в очереди срабатывала, отправляя пустое поле на сервер для сохранения или после того, как оно меняет место ввода для текстового текста в span.

+0

'return' заканчивает свой код и "возвращается" к тому, что называют его. –

+4

Мое предложение - потерять встроенные события и использовать обработчик событий. Сохраните возвращаемое значение функции в переменной. Затем используйте 'if', чтобы увидеть, следует ли вам закончить или продолжить. –

+0

@RocketHazmat Итак, вы имеете в виду глобальную переменную, которая может быть проверена следующими функциями? Я думаю, что это может сработать. –

ответ

1

Попробуйте

функция getnDisplayTextInputBox (ID) {

var s = document.getElementById(id); 

    s.setAttribute('onclick', ''); 

var obj = getDataAttribs2Obj(id); 
var str = getParamStrFromDataObj(obj); 

s.innerHTML = "<input type=\"text\" data-param=\""+obj['param']+"\" id=\"edit\" value=\""+htmlentities(s.innerHTML)+"\" onblur=\"if(this.value==''){return false;}else{return reqField(this); postData('"+obj['sendtourl']+"', '"+str+"&spanid="+id+"&newVal='+this.value, 'replaceTextTextInputFieldWithValue(resp);', '','');}\">"; 

document.getElementById('edit').focus(); 

}

+0

Спасибо. Интересное решение, которое, как я подозреваю, решило бы мою проблему. Я думаю, что по-прежнему предпочитаю то, что я сделал (установить глобальную переменную и проверить, что в каждой из следующих функций, чтобы определить, следует ли прервать или нет. +1 для работоспособного решения. –

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