如何使'返回false'防止在内联onclick事件处理程序中连续执行函数

How to make 'return false' prevent execution of successive functions in an inline onclick event handler?

本文关键字:程序 事件处理 onclick 执行 函数 连续 返回 何使 false      更新时间:2023-09-26

我有一个包含多个函数的内联事件处理程序的以下输入字段。我希望如果reqField()返回false,其余的功能将被取消,但这并没有发生。

所发生的是reqField()被提前终止,如果有一个默认的动作输入字段,它将被阻止。是否有办法达到我想要的结果(终止剩余的函数)。

顺便说一下,我不能在returning false之前将它们从onclick中移除,因为它们需要留在下一个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

一些span有一个属性data-param='required',如果是这样,reqField()将要求该字段不为空,如果为空则将return false(在用警告框提醒用户问题之后)。显然,我不希望下一个内联函数触发,将空字段发送到服务器以进行保存,或者之后的函数,它将输入框替换为span中的纯文本。

试试这个

getdisplaytexttinputbox (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();

}